diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..9358383 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": "@nordicsemiconductor/eslint-config-asset-tracker-cloud-typescript" +} diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index e2c4aa6..f72ca5f 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -7,10 +7,18 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - - uses: denoland/setup-deno@v1 + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 with: - deno-version: v1.x - - - run: deno test --allow-read ./* + node-version: "16.x" + - name: Keep npm cache around to speed up installs + uses: actions/cache@v2 + with: + path: ~/.npm + key: ${{ runner.OS }}-build-${{ hashFiles('**/package-lock.json') }} + - name: Install dependencies + run: npm ci --no-audit + - name: Compile + run: npx tsc + - name: Test + run: npm test diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c6d8012 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +npm-debug.log +dist/ diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100755 index 0000000..273ed27 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +npx commitlint -g commitlint.config.cjs --edit $1 \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 0000000..95bbcbd --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +npx lint-staged && npm exec -- jest --onlyChanged && npx tsc \ No newline at end of file diff --git a/.mergify.yml b/.mergify.yml new file mode 100644 index 0000000..d6ed48f --- /dev/null +++ b/.mergify.yml @@ -0,0 +1,12 @@ +pull_request_rules: + - name: Automatic merge security PRs when all status checks pass + conditions: + - author~=^(dependabot\[bot\]|renovate\[bot\])$ + - status-success=tests + actions: + merge: + method: rebase + rebase_fallback: squash + label: + add: + - mergify diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..3ad4c84 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,2 @@ +dist/ +package-lock.json diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..19cdfa1 --- /dev/null +++ b/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2020, Nordic Semiconductor ASA | nordicsemi.no +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md index 9ee89de..b2eadd2 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,12 @@ -# Advent of Code 2023 solutions in Deno +# Advent of Code 2021 solutions in TypeScript -```bash -deno test --allow-read *_test.ts -``` +[![GitHub Actions](https://github.com/coderbyheart/adventofcode/workflows/Test/badge.svg)](https://github.com/coderbyheart/adventofcode/actions) +[![Renovate](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://renovatebot.com) +[![Mergify Status](https://img.shields.io/endpoint.svg?url=https://dashboard.mergify.io/badges/coderbyheart/adventofcode&style=flat)](https://mergify.io) +[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/) +[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier/) +[![ESLint: TypeScript](https://img.shields.io/badge/ESLint-TypeScript-blue.svg)](https://github.com/typescript-eslint/typescript-eslint) + + git clone https://github.com/coderbyheart/adventofcode + npm ci + npm test diff --git a/commitlint.config.cjs b/commitlint.config.cjs new file mode 100644 index 0000000..29cfa50 --- /dev/null +++ b/commitlint.config.cjs @@ -0,0 +1 @@ +module.exports = { extends: ["@commitlint/config-angular"] }; diff --git a/day01.ts b/day01.ts deleted file mode 100644 index 3397bca..0000000 --- a/day01.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { reverseString } from "./util/reverseString.ts"; - -/** - * the calibration value can be found by combining the first digit and the last digit (in that order) to form a single two-digit number. - */ -export const calibrationValue = (line: string): number => { - const first = line.split("").find((s) => /[0-9]/.test(s)); - const last = line - .split("") - .reverse() - .find((s) => /[0-9]/.test(s)); - return parseInt(`${first}${last}`, 10); -}; - -const numberMap = { - one: "1", - two: "2", - three: "3", - four: "4", - five: "5", - six: "6", - seven: "7", - eight: "8", - nine: "9", -}; - -/** - * Find the first number in a line - */ -const findFirstNumber = (line: string, reverse = false): string | undefined => - [ - // Find number words - ...Object.entries(numberMap).map<[string, number]>(([search]) => [ - numberMap[search as keyof typeof numberMap], - line.indexOf(reverse ? reverseString(search) : search), - ]), - // Find real numbers - ...line - .split("") - .map<[string, number]>((s, i) => (/[0-9]/.test(s) ? [s, i] : [s, -1])), - ] - .filter(([, index]) => index > -1) - .sort(([, index1], [, index2]) => index1 - index2)[0]?.[0] as - | keyof typeof numberMap - | undefined; - -/** - * Find a number at the beginning and at the end of the line. - * Numbers can also be expresses as words. - */ -export const twoNumbers = (line: string): string => { - const firstNumber = findFirstNumber(line); - const lastNumber = findFirstNumber(reverseString(line), true); - return `${firstNumber ?? ""}${lastNumber ?? ""}`; -}; diff --git a/day01/depthChanges.ts b/day01/depthChanges.ts new file mode 100644 index 0000000..d6b8792 --- /dev/null +++ b/day01/depthChanges.ts @@ -0,0 +1,6 @@ +export const depthChanges = (depths: number[]): number => + depths.reduce((dives, depth, k, depths) => { + const previousDepth = depths[k - 1] ?? Number.MAX_SAFE_INTEGER + if (depth > previousDepth) return dives + 1 + return dives + }, 0) diff --git a/day01/input.txt b/day01/input.txt new file mode 100644 index 0000000..1d364e8 --- /dev/null +++ b/day01/input.txt @@ -0,0 +1,2000 @@ +191 +192 +201 +205 +206 +203 +188 +189 +199 +206 +224 +230 +233 +232 +260 +257 +258 +259 +251 +233 +236 +237 +238 +241 +242 +243 +250 +259 +251 +255 +263 +265 +266 +259 +265 +260 +267 +270 +271 +284 +286 +301 +302 +304 +309 +333 +335 +342 +350 +349 +342 +343 +345 +346 +331 +332 +317 +324 +328 +327 +332 +320 +340 +341 +344 +353 +361 +372 +376 +387 +397 +433 +431 +432 +436 +435 +449 +460 +474 +476 +483 +490 +487 +488 +495 +500 +511 +531 +537 +525 +503 +506 +515 +517 +518 +517 +514 +516 +521 +515 +516 +517 +526 +514 +490 +487 +484 +482 +474 +476 +480 +479 +474 +482 +480 +481 +483 +484 +482 +481 +477 +478 +482 +483 +494 +517 +520 +517 +510 +497 +481 +519 +522 +524 +528 +530 +543 +542 +543 +531 +529 +528 +526 +499 +521 +526 +518 +533 +535 +538 +542 +572 +573 +574 +548 +550 +559 +567 +569 +570 +571 +570 +587 +592 +600 +620 +630 +627 +652 +659 +656 +663 +661 +666 +681 +687 +702 +714 +715 +711 +714 +722 +719 +723 +721 +720 +731 +724 +726 +732 +735 +736 +739 +745 +739 +747 +745 +758 +755 +754 +755 +756 +757 +758 +759 +760 +763 +799 +800 +810 +825 +826 +829 +841 +848 +852 +855 +858 +856 +874 +894 +897 +892 +925 +932 +935 +931 +953 +971 +967 +953 +957 +941 +950 +952 +923 +922 +933 +938 +943 +944 +964 +952 +935 +913 +901 +902 +903 +904 +901 +909 +910 +909 +929 +930 +929 +924 +916 +904 +897 +905 +908 +899 +898 +903 +907 +924 +915 +919 +911 +915 +916 +926 +931 +933 +965 +967 +968 +979 +981 +997 +1009 +1012 +1010 +1011 +1036 +1035 +1049 +1050 +1048 +1053 +1054 +1055 +1053 +1046 +1055 +1069 +1067 +1062 +1081 +1079 +1091 +1093 +1095 +1093 +1100 +1091 +1093 +1107 +1109 +1105 +1111 +1121 +1140 +1141 +1148 +1149 +1162 +1166 +1165 +1163 +1164 +1165 +1169 +1182 +1188 +1186 +1185 +1165 +1169 +1176 +1177 +1179 +1183 +1182 +1188 +1191 +1181 +1183 +1204 +1203 +1204 +1206 +1201 +1215 +1232 +1234 +1239 +1243 +1235 +1239 +1242 +1238 +1240 +1241 +1263 +1259 +1267 +1257 +1261 +1265 +1264 +1261 +1260 +1262 +1265 +1263 +1266 +1262 +1263 +1268 +1271 +1282 +1286 +1287 +1284 +1280 +1279 +1280 +1288 +1289 +1292 +1287 +1293 +1301 +1329 +1343 +1350 +1347 +1348 +1354 +1356 +1359 +1360 +1363 +1369 +1366 +1369 +1370 +1368 +1373 +1376 +1385 +1391 +1400 +1411 +1415 +1396 +1398 +1428 +1433 +1442 +1444 +1436 +1467 +1469 +1470 +1484 +1485 +1489 +1498 +1468 +1469 +1468 +1465 +1459 +1460 +1458 +1459 +1460 +1462 +1467 +1479 +1499 +1501 +1512 +1515 +1516 +1519 +1524 +1538 +1547 +1558 +1563 +1573 +1584 +1592 +1606 +1632 +1630 +1637 +1640 +1633 +1662 +1677 +1681 +1679 +1681 +1683 +1684 +1704 +1709 +1705 +1702 +1701 +1700 +1707 +1708 +1717 +1709 +1718 +1721 +1738 +1740 +1746 +1748 +1750 +1751 +1757 +1758 +1765 +1767 +1749 +1730 +1732 +1745 +1751 +1752 +1750 +1747 +1746 +1751 +1756 +1766 +1767 +1769 +1767 +1775 +1806 +1812 +1808 +1809 +1845 +1846 +1848 +1860 +1864 +1866 +1868 +1874 +1853 +1852 +1848 +1835 +1851 +1850 +1843 +1842 +1835 +1862 +1865 +1859 +1886 +1887 +1888 +1900 +1926 +1942 +1944 +1945 +1946 +1945 +1939 +1946 +1951 +1946 +1951 +1957 +1971 +1985 +1986 +1987 +1990 +1991 +1992 +1991 +1986 +1989 +1991 +1998 +1996 +2002 +2003 +2007 +2009 +2010 +1989 +1991 +1990 +1991 +2001 +2016 +2017 +2026 +2028 +2039 +2038 +2053 +2047 +2052 +2049 +2050 +2052 +2057 +2055 +2053 +2051 +2042 +2027 +2036 +2026 +2040 +2042 +2046 +2045 +2050 +2051 +2072 +2073 +2075 +2072 +2078 +2077 +2082 +2087 +2074 +2079 +2074 +2070 +2071 +2070 +2074 +2076 +2077 +2084 +2086 +2089 +2102 +2100 +2102 +2104 +2110 +2112 +2093 +2104 +2107 +2104 +2130 +2101 +2103 +2102 +2103 +2111 +2116 +2117 +2122 +2119 +2126 +2127 +2128 +2148 +2159 +2160 +2157 +2165 +2173 +2169 +2170 +2175 +2161 +2151 +2163 +2172 +2209 +2211 +2209 +2223 +2222 +2221 +2220 +2226 +2228 +2229 +2226 +2234 +2214 +2212 +2216 +2215 +2220 +2223 +2228 +2234 +2233 +2235 +2233 +2235 +2264 +2263 +2262 +2285 +2287 +2303 +2286 +2287 +2279 +2280 +2285 +2279 +2281 +2291 +2295 +2322 +2323 +2332 +2337 +2340 +2343 +2344 +2370 +2371 +2370 +2377 +2385 +2390 +2389 +2396 +2401 +2407 +2410 +2411 +2412 +2413 +2415 +2422 +2419 +2431 +2439 +2444 +2447 +2457 +2443 +2455 +2466 +2483 +2471 +2472 +2481 +2486 +2490 +2470 +2471 +2483 +2481 +2480 +2490 +2529 +2541 +2546 +2547 +2570 +2574 +2560 +2558 +2562 +2561 +2566 +2565 +2563 +2569 +2571 +2582 +2596 +2594 +2593 +2594 +2585 +2566 +2567 +2550 +2559 +2551 +2561 +2542 +2544 +2553 +2557 +2561 +2574 +2577 +2593 +2601 +2613 +2621 +2623 +2628 +2627 +2648 +2640 +2639 +2664 +2649 +2659 +2663 +2662 +2664 +2659 +2660 +2659 +2675 +2654 +2655 +2657 +2656 +2662 +2669 +2663 +2652 +2645 +2656 +2664 +2660 +2680 +2684 +2673 +2678 +2675 +2662 +2663 +2666 +2668 +2681 +2676 +2687 +2688 +2689 +2688 +2689 +2692 +2693 +2704 +2703 +2702 +2701 +2707 +2710 +2711 +2713 +2712 +2687 +2697 +2698 +2699 +2733 +2731 +2738 +2739 +2740 +2746 +2741 +2744 +2741 +2746 +2744 +2731 +2733 +2740 +2741 +2745 +2747 +2748 +2765 +2774 +2787 +2789 +2790 +2794 +2797 +2778 +2788 +2790 +2789 +2784 +2788 +2789 +2807 +2826 +2842 +2835 +2834 +2837 +2846 +2847 +2849 +2866 +2868 +2880 +2881 +2885 +2892 +2893 +2895 +2896 +2905 +2907 +2914 +2917 +2915 +2910 +2914 +2916 +2917 +2926 +2927 +2946 +2961 +2962 +2952 +2954 +2960 +2972 +2976 +2978 +2999 +3007 +3009 +2998 +3001 +3021 +3017 +3011 +3013 +3010 +3007 +3019 +3020 +3037 +3038 +3037 +3041 +3046 +3060 +3064 +3066 +3056 +3059 +3058 +3049 +3056 +3063 +3065 +3055 +3056 +3055 +3054 +3067 +3066 +3071 +3075 +3057 +3056 +3057 +3070 +3082 +3107 +3109 +3107 +3102 +3101 +3103 +3098 +3096 +3097 +3093 +3095 +3097 +3106 +3124 +3125 +3128 +3137 +3145 +3143 +3146 +3120 +3122 +3135 +3129 +3158 +3159 +3176 +3212 +3216 +3220 +3222 +3225 +3229 +3235 +3252 +3247 +3252 +3256 +3259 +3270 +3277 +3286 +3296 +3311 +3322 +3324 +3331 +3363 +3364 +3376 +3372 +3373 +3384 +3392 +3397 +3393 +3395 +3407 +3408 +3409 +3404 +3409 +3414 +3422 +3427 +3426 +3428 +3410 +3418 +3416 +3408 +3406 +3411 +3412 +3418 +3427 +3425 +3413 +3400 +3399 +3400 +3393 +3394 +3395 +3394 +3393 +3392 +3389 +3390 +3394 +3395 +3402 +3394 +3395 +3415 +3405 +3407 +3432 +3439 +3437 +3439 +3458 +3461 +3469 +3464 +3463 +3464 +3453 +3458 +3452 +3455 +3456 +3459 +3464 +3468 +3471 +3474 +3476 +3475 +3477 +3479 +3481 +3482 +3492 +3501 +3506 +3501 +3497 +3498 +3501 +3502 +3496 +3510 +3513 +3515 +3533 +3534 +3545 +3552 +3561 +3554 +3561 +3562 +3563 +3564 +3553 +3554 +3558 +3546 +3547 +3561 +3563 +3547 +3570 +3572 +3579 +3590 +3604 +3634 +3627 +3630 +3629 +3632 +3598 +3599 +3619 +3617 +3630 +3624 +3625 +3627 +3636 +3632 +3633 +3638 +3642 +3640 +3621 +3623 +3620 +3627 +3625 +3624 +3616 +3648 +3630 +3625 +3628 +3634 +3629 +3649 +3651 +3652 +3653 +3660 +3672 +3674 +3684 +3706 +3707 +3713 +3708 +3707 +3697 +3674 +3670 +3671 +3670 +3674 +3676 +3677 +3674 +3693 +3691 +3693 +3694 +3698 +3662 +3671 +3664 +3665 +3666 +3667 +3665 +3666 +3667 +3666 +3667 +3663 +3662 +3665 +3659 +3651 +3657 +3656 +3663 +3659 +3669 +3666 +3652 +3643 +3635 +3665 +3673 +3682 +3681 +3674 +3673 +3677 +3674 +3672 +3674 +3677 +3685 +3697 +3696 +3708 +3704 +3702 +3705 +3709 +3740 +3741 +3740 +3734 +3738 +3741 +3743 +3741 +3723 +3693 +3703 +3702 +3712 +3713 +3705 +3706 +3703 +3718 +3749 +3761 +3760 +3763 +3765 +3757 +3733 +3740 +3736 +3762 +3761 +3771 +3764 +3761 +3763 +3762 +3756 +3771 +3753 +3759 +3789 +3791 +3792 +3780 +3787 +3788 +3786 +3792 +3793 +3790 +3794 +3795 +3794 +3791 +3801 +3802 +3811 +3813 +3815 +3818 +3824 +3835 +3837 +3836 +3838 +3840 +3841 +3842 +3840 +3841 +3843 +3872 +3879 +3884 +3871 +3878 +3896 +3897 +3896 +3895 +3893 +3887 +3882 +3885 +3887 +3875 +3876 +3856 +3859 +3853 +3831 +3832 +3831 +3830 +3814 +3815 +3799 +3814 +3811 +3834 +3845 +3842 +3847 +3853 +3854 +3853 +3851 +3870 +3869 +3870 +3868 +3876 +3874 +3875 +3872 +3866 +3874 +3873 +3857 +3858 +3857 +3865 +3874 +3865 +3876 +3878 +3881 +3883 +3884 +3885 +3887 +3863 +3862 +3864 +3867 +3872 +3875 +3876 +3884 +3880 +3891 +3897 +3898 +3894 +3891 +3895 +3893 +3912 +3913 +3910 +3916 +3912 +3917 +3925 +3937 +3942 +3941 +3947 +3952 +3955 +3952 +3944 +3945 +3946 +3960 +3985 +4012 +4013 +4014 +4012 +4032 +4045 +4029 +4030 +4048 +4055 +4054 +4072 +4073 +4083 +4085 +4086 +4091 +4094 +4097 +4112 +4090 +4102 +4108 +4134 +4147 +4148 +4149 +4172 +4175 +4182 +4176 +4154 +4170 +4180 +4179 +4186 +4187 +4182 +4170 +4172 +4178 +4181 +4193 +4188 +4193 +4192 +4202 +4205 +4207 +4185 +4183 +4187 +4189 +4204 +4207 +4202 +4204 +4201 +4214 +4219 +4216 +4211 +4199 +4196 +4195 +4199 +4200 +4201 +4192 +4191 +4195 +4217 +4205 +4210 +4218 +4204 +4207 +4213 +4214 +4215 +4233 +4240 +4253 +4251 +4253 +4262 +4266 +4257 +4261 +4262 +4271 +4263 +4262 +4284 +4288 +4267 +4276 +4283 +4284 +4283 +4284 +4281 +4278 +4266 +4261 +4260 +4276 +4281 +4283 +4272 +4297 +4302 +4301 +4312 +4311 +4329 +4346 +4336 +4347 +4365 +4364 +4366 +4370 +4372 +4365 +4364 +4367 +4365 +4366 +4368 +4369 +4372 +4379 +4373 +4391 +4390 +4393 +4389 +4370 +4372 +4375 +4376 +4378 +4387 +4388 +4408 +4419 +4421 +4414 +4415 +4413 +4415 +4419 +4420 +4405 +4422 +4421 +4423 +4435 +4434 +4439 +4441 +4443 +4450 +4446 +4450 +4452 +4453 +4454 +4458 +4462 +4475 +4492 +4489 +4494 +4498 +4497 +4498 +4499 +4511 +4515 +4516 +4529 +4534 +4538 +4540 +4537 +4544 +4561 +4562 +4563 +4565 +4569 +4564 +4569 +4576 +4580 +4619 +4618 +4620 +4633 +4634 +4613 +4611 +4614 +4632 +4618 +4629 +4631 +4643 +4640 +4644 +4628 +4630 +4632 +4631 +4648 +4652 +4651 +4640 +4637 +4638 +4641 +4649 +4654 +4650 +4648 +4651 +4650 +4630 +4631 +4632 +4628 +4634 +4633 +4635 +4641 +4633 +4632 +4634 +4646 +4658 +4654 +4639 +4658 +4659 +4664 +4673 +4679 +4681 +4687 +4685 +4719 +4720 +4721 +4731 +4741 +4744 +4727 +4729 +4735 +4738 +4748 +4749 +4750 +4746 +4753 +4754 +4762 +4773 +4774 +4777 +4783 +4782 +4793 +4799 +4805 +4810 +4813 +4812 +4824 +4817 +4815 +4817 +4816 +4804 +4809 +4827 +4820 +4819 +4849 +4850 +4851 +4850 +4862 +4861 +4873 +4875 +4878 +4879 +4882 +4883 +4878 +4880 +4893 +4890 +4891 +4886 +4889 +4890 +4904 +4902 +4925 +4927 +4923 +4920 +4915 +4924 +4896 +4898 +4891 +4894 +4898 +4900 +4901 +4902 +4912 +4913 +4911 +4908 +4917 +4905 +4908 +4931 +4934 +4969 +4973 +4972 +4982 +4983 +5001 +5000 +5004 +5009 +5007 +5002 +5000 +4999 +5000 +5002 +4991 +4993 +4997 +4998 +5000 +5003 +4998 +4999 +4996 +5005 +5004 +4993 +4994 +4995 +4996 +5000 +5004 +5011 +5013 +5012 +5002 +4999 +4979 +4989 +4992 +5002 +5004 +5005 +5004 +5027 +5026 +5027 +5031 +5035 +5037 +5044 +5050 +5057 +5062 +5065 +5062 +5056 +5058 +5065 +5073 +5093 +5092 +5109 +5110 +5130 +5137 +5159 +5172 +5164 +5194 +5196 +5197 +5234 +5233 +5222 +5225 +5227 +5231 +5248 +5249 +5261 +5254 +5255 +5256 +5257 +5254 +5252 +5253 +5261 +5279 +5266 +5267 +5259 +5283 +5309 +5332 +5335 +5336 +5337 +5336 +5344 +5349 +5356 +5386 +5396 +5403 +5409 +5410 +5413 +5415 +5417 +5431 +5433 +5436 +5434 +5436 +5440 +5450 +5449 +5461 +5480 +5482 +5479 +5481 +5482 +5494 +5495 +5494 +5495 +5498 +5497 +5510 +5512 +5508 +5499 +5509 +5520 +5540 +5553 +5554 +5555 +5568 +5550 +5540 +5535 +5564 +5567 +5575 +5574 +5586 +5579 +5580 +5579 +5577 +5588 +5592 +5562 +5568 +5589 +5595 +5606 +5607 +5596 +5608 +5627 +5635 +5632 +5631 +5630 +5629 +5628 +5626 +5625 +5629 +5630 +5629 +5630 +5633 +5634 +5639 +5640 +5660 +5666 +5660 +5663 +5662 +5672 +5671 +5652 +5650 +5667 +5666 +5642 +5643 +5642 +5640 +5642 +5644 +5649 +5650 +5647 +5648 +5647 +5651 +5650 +5651 +5653 +5646 +5627 +5636 +5635 +5623 +5624 +5625 +5624 +5633 +5630 +5622 +5619 +5616 +5634 +5635 +5630 +5664 +5671 +5673 +5671 +5683 +5693 +5699 +5700 +5701 +5697 +5693 +5664 +5665 +5677 +5670 +5684 +5653 +5648 +5646 +5648 +5645 +5651 +5650 +5651 +5652 +5653 +5654 +5639 +5648 +5640 +5657 +5667 +5685 +5706 +5697 +5698 +5702 +5709 +5705 +5720 +5723 +5716 +5712 +5708 +5707 +5668 +5665 +5666 +5667 +5666 +5670 +5669 +5670 +5671 +5675 +5676 +5682 +5683 +5673 +5675 +5666 +5675 +5677 +5686 +5693 +5694 +5676 +5677 +5678 +5680 +5689 +5712 +5714 +5730 +5729 +5740 +5743 +5776 +5777 +5788 +5787 +5783 +5791 \ No newline at end of file diff --git a/day01/slidingDepthChanges.ts b/day01/slidingDepthChanges.ts new file mode 100644 index 0000000..f884d2f --- /dev/null +++ b/day01/slidingDepthChanges.ts @@ -0,0 +1,13 @@ +import { slidingWindowDepth } from './slidingWindowDepth' + +export const slidingDepthChanges = + (windowSize: number) => + (depths: number[]): number => { + const depthsWindow = slidingWindowDepth(depths, windowSize) + return depths.reduce((dives, _, k) => { + const currentWindowDepth = depthsWindow(k) + const previousWindowDepth = depthsWindow(k - 1) + if (currentWindowDepth > previousWindowDepth) return dives + 1 + return dives + }, 0) + } diff --git a/day01/slidingWindowDepth.spec.ts b/day01/slidingWindowDepth.spec.ts new file mode 100644 index 0000000..addc1e0 --- /dev/null +++ b/day01/slidingWindowDepth.spec.ts @@ -0,0 +1,14 @@ +import { slidingWindowDepth } from './slidingWindowDepth' + +const sample = [199, 200, 208, 210, 200, 207, 240, 269, 260, 263] + +describe('slidingWindowDepth()', () => { + it.each([ + [0, Number.MAX_SAFE_INTEGER], + [1, Number.MAX_SAFE_INTEGER], + [2, 607], + [3, 618], + ])('should calculate the sliding window depth', (k, depth) => + expect(slidingWindowDepth(sample, 3)(k)).toEqual(depth), + ) +}) diff --git a/day01/slidingWindowDepth.ts b/day01/slidingWindowDepth.ts new file mode 100644 index 0000000..c12bfca --- /dev/null +++ b/day01/slidingWindowDepth.ts @@ -0,0 +1,12 @@ +export const slidingWindowDepth = + (depths: number[], windowSize: number) => + (index: number): number => { + let currentWindowDepth = depths[index] + if (currentWindowDepth === undefined) return Number.MAX_SAFE_INTEGER + for (let j = 1; j < windowSize; j++) { + const prev = depths[index - j] + if (prev === undefined) return Number.MAX_SAFE_INTEGER + currentWindowDepth += prev + } + return currentWindowDepth + } diff --git a/day01/solution.spec.ts b/day01/solution.spec.ts new file mode 100644 index 0000000..60068f7 --- /dev/null +++ b/day01/solution.spec.ts @@ -0,0 +1,26 @@ +import { loader } from '../lib/loader' +import { depthChanges } from './depthChanges' +import { slidingDepthChanges } from './slidingDepthChanges' + +const input = loader(1)('input').map((s) => parseInt(s, 10)) + +describe('Day 1: Sonar Sweep', () => { + describe('Part 1', () => { + it('should solve the example', () => + expect( + depthChanges([199, 200, 208, 210, 200, 207, 240, 269, 260, 263]), + ).toEqual(7)) + it('should solve the puzzle', () => + expect(depthChanges(input)).toEqual(1374)) + }) + describe('Part 2', () => { + it('should solve the example', () => + expect( + slidingDepthChanges(3)([ + 199, 200, 208, 210, 200, 207, 240, 269, 260, 263, + ]), + ).toEqual(5)) + it('should solve the puzzle', () => + expect(slidingDepthChanges(3)(input)).toEqual(1418)) + }) +}) diff --git a/day01_test.ts b/day01_test.ts deleted file mode 100644 index 1c287af..0000000 --- a/day01_test.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { assertEquals } from "https://deno.land/std@0.208.0/assert/mod.ts"; -import { calibrationValue, twoNumbers } from "./day01.ts"; -import { sum } from "./util/sum.ts"; - -Deno.test("Day 1: Trebuchet?!", async (t) => { - await t.step("calibrationValue()", async (t) => { - for ( - const [line, expectedValue] of [ - ["1abc2", 12], - ["pqr3stu8vwx", 38], - ["a1b2c3d4e5f", 15], - ["treb7uchet", 77], - ] as [string, number][] - ) { - await t.step( - `from line ${line} calculate ${expectedValue}`, - () => assertEquals(calibrationValue(line), expectedValue), - ); - } - }); - - await t.step("Part 1", async (t) => { - await t.step("it should solve the sample", () => - assertEquals( - sum( - ["1abc2", "pqr3stu8vwx", "a1b2c3d4e5f", "treb7uchet"].map( - calibrationValue, - ), - ), - 142, - )); - - await t.step("it should solve", async () => - assertEquals( - sum( - (await Deno.readTextFile("./input/day01.txt")) - .split("\n") - .map(calibrationValue), - ), - 55971, - )); - }); - - await t.step("Part 2", async (t) => { - await t.step("twoNumbers()", async (t) => { - for ( - const [line, expectedLine] of [ - ["two1nine", "29"], - ["eightwothree", "83"], - ["abcone2threexyz", "13"], - ["xtwone3four", "24"], - ["4nineeightseven2", "42"], - ["zoneight234", "14"], - ["7pqrstsixteen", "76"], - ] - ) { - await t.step( - `it should convert ${line} to ${expectedLine}`, - () => assertEquals(twoNumbers(line), expectedLine), - ); - } - - for ( - const [line, expectedValue] of [ - ["two1nine", 29], - ["eightwothree", 83], - ["abcone2threexyz", 13], - ["xtwone3four", 24], - ["4nineeightseven2", 42], - ["zoneight234", 14], - ["7pqrstsixteen", 76], - ] as [string, number][] - ) { - await t.step( - `it should find in ${line} the real first and last digit ${expectedValue}`, - () => assertEquals(calibrationValue(twoNumbers(line)), expectedValue), - ); - } - }); - - await t.step("it should solve sample", () => - assertEquals( - sum( - [ - "two1nine", - "eightwothree", - "abcone2threexyz", - "xtwone3four", - "4nineeightseven2", - "zoneight234", - "7pqrstsixteen", - ] - .map(twoNumbers) - .map(calibrationValue), - ), - 281, - )); - - await t.step("it should solve", async () => - assertEquals( - sum( - (await Deno.readTextFile("./input/day01.txt")) - .split("\n") - .map(twoNumbers) - .map(calibrationValue), - ), - 54719, - )); - }); -}); diff --git a/day02/course.txt b/day02/course.txt new file mode 100644 index 0000000..afbc5fe --- /dev/null +++ b/day02/course.txt @@ -0,0 +1,1000 @@ +forward 8 +down 9 +forward 2 +down 1 +forward 9 +forward 7 +forward 5 +up 3 +up 3 +down 5 +forward 2 +down 8 +down 3 +forward 6 +down 2 +down 4 +down 7 +down 7 +forward 2 +down 6 +down 8 +down 2 +down 8 +up 9 +down 8 +forward 8 +down 5 +up 4 +forward 4 +forward 4 +forward 3 +down 9 +forward 8 +up 3 +forward 2 +forward 3 +forward 6 +down 7 +down 2 +forward 4 +forward 7 +forward 6 +up 5 +up 1 +forward 4 +down 9 +up 6 +forward 6 +up 9 +forward 1 +down 9 +forward 4 +down 3 +forward 7 +forward 5 +down 1 +up 9 +down 9 +forward 6 +forward 1 +down 5 +down 6 +forward 6 +forward 3 +up 4 +up 9 +down 3 +forward 6 +up 4 +up 6 +forward 4 +down 1 +down 2 +up 9 +forward 8 +down 2 +down 3 +down 4 +up 3 +forward 3 +forward 4 +down 4 +forward 7 +forward 9 +down 7 +forward 6 +forward 2 +up 6 +forward 7 +forward 9 +down 5 +forward 6 +up 9 +forward 6 +forward 2 +forward 6 +up 3 +down 1 +forward 5 +down 3 +forward 7 +down 4 +forward 1 +forward 7 +down 1 +up 2 +down 7 +down 6 +forward 8 +forward 2 +forward 1 +forward 9 +down 3 +forward 3 +down 6 +up 8 +up 3 +forward 1 +forward 3 +forward 7 +down 9 +forward 7 +forward 3 +up 6 +forward 4 +down 9 +forward 2 +down 4 +up 2 +down 1 +up 1 +down 6 +forward 1 +up 6 +up 7 +forward 3 +forward 3 +forward 2 +forward 1 +down 7 +forward 9 +down 5 +down 9 +up 9 +forward 3 +forward 8 +down 3 +forward 9 +forward 4 +down 3 +up 4 +up 8 +up 4 +down 8 +down 6 +down 5 +forward 2 +up 6 +up 1 +up 9 +down 4 +up 8 +forward 6 +down 1 +forward 7 +up 2 +forward 6 +up 2 +down 6 +down 5 +forward 2 +down 2 +down 1 +forward 8 +forward 1 +up 9 +forward 3 +down 6 +forward 2 +forward 8 +down 3 +forward 3 +forward 4 +forward 7 +forward 2 +up 4 +forward 8 +forward 1 +forward 9 +down 3 +down 1 +forward 8 +down 5 +down 3 +forward 5 +down 7 +down 1 +forward 8 +forward 2 +forward 4 +forward 8 +forward 6 +down 1 +forward 5 +forward 9 +forward 9 +up 9 +forward 9 +forward 4 +down 5 +down 2 +down 3 +forward 8 +forward 9 +up 8 +up 1 +up 6 +forward 7 +up 9 +forward 2 +forward 6 +up 6 +forward 3 +up 4 +forward 1 +down 4 +up 6 +down 5 +forward 7 +forward 6 +down 3 +down 4 +forward 3 +down 6 +down 1 +forward 5 +forward 7 +up 8 +forward 4 +up 7 +down 4 +forward 3 +down 7 +forward 7 +forward 4 +forward 1 +forward 8 +up 5 +up 6 +forward 5 +forward 3 +down 6 +forward 8 +forward 2 +forward 7 +down 7 +down 8 +down 3 +up 3 +down 1 +down 1 +forward 6 +forward 9 +forward 4 +forward 9 +forward 6 +down 1 +forward 9 +down 6 +down 8 +up 5 +down 8 +forward 4 +forward 2 +up 6 +down 9 +forward 6 +down 9 +down 6 +down 6 +forward 2 +up 8 +down 7 +down 2 +forward 2 +forward 2 +down 1 +up 8 +down 5 +forward 9 +forward 5 +forward 8 +forward 8 +forward 1 +down 2 +down 7 +up 5 +forward 9 +forward 4 +forward 4 +forward 6 +down 7 +up 5 +forward 5 +up 9 +down 7 +down 4 +down 9 +forward 7 +up 4 +down 1 +down 6 +up 2 +up 6 +down 2 +forward 9 +down 3 +forward 3 +forward 4 +forward 1 +up 2 +forward 6 +down 3 +forward 2 +down 9 +forward 8 +forward 3 +forward 2 +up 5 +forward 3 +forward 1 +down 8 +up 2 +up 4 +up 5 +down 3 +down 6 +down 1 +forward 4 +up 3 +down 1 +down 4 +up 6 +forward 8 +down 5 +down 7 +down 7 +forward 9 +forward 9 +down 2 +up 2 +down 5 +forward 5 +forward 4 +down 7 +forward 4 +down 2 +forward 2 +forward 4 +up 8 +down 8 +up 4 +forward 2 +forward 2 +up 8 +forward 2 +down 3 +down 7 +down 9 +up 6 +up 3 +forward 2 +forward 3 +up 8 +forward 6 +up 8 +up 1 +down 6 +down 8 +up 9 +down 1 +up 8 +forward 9 +forward 4 +forward 9 +forward 8 +forward 1 +down 6 +down 7 +up 5 +down 1 +forward 9 +down 9 +forward 7 +down 5 +forward 7 +down 1 +down 4 +down 4 +forward 6 +forward 1 +up 4 +up 2 +forward 7 +down 6 +down 2 +down 3 +up 7 +up 1 +down 6 +down 6 +down 8 +down 8 +forward 5 +forward 1 +forward 5 +up 8 +forward 8 +up 8 +forward 1 +down 9 +forward 1 +up 7 +up 3 +down 1 +down 9 +up 2 +down 3 +down 2 +forward 9 +up 9 +up 1 +up 5 +forward 8 +down 3 +down 7 +forward 7 +down 8 +down 5 +down 5 +down 4 +down 7 +forward 6 +forward 6 +forward 4 +forward 6 +forward 3 +up 5 +forward 2 +down 7 +forward 1 +down 4 +down 7 +down 7 +forward 4 +down 2 +up 4 +forward 2 +up 2 +up 3 +down 5 +forward 3 +down 2 +forward 5 +down 2 +down 1 +up 4 +up 5 +up 9 +forward 1 +forward 9 +down 9 +up 8 +forward 9 +forward 7 +down 9 +down 2 +down 9 +forward 9 +forward 7 +up 7 +forward 6 +up 6 +forward 5 +forward 6 +down 4 +forward 8 +forward 5 +forward 2 +up 4 +down 4 +forward 1 +down 2 +up 9 +up 7 +up 2 +up 3 +down 9 +forward 4 +up 6 +forward 5 +forward 5 +forward 9 +forward 1 +down 6 +forward 8 +down 5 +up 3 +up 1 +down 2 +up 4 +down 1 +down 9 +forward 8 +down 2 +forward 7 +down 7 +up 5 +down 7 +down 3 +forward 2 +forward 2 +forward 4 +down 9 +down 6 +down 9 +forward 6 +down 6 +down 9 +forward 1 +down 1 +forward 8 +down 4 +up 6 +down 2 +forward 9 +down 3 +up 3 +down 2 +up 2 +up 5 +down 8 +forward 1 +forward 3 +down 8 +up 3 +up 3 +up 3 +forward 2 +up 3 +down 4 +down 1 +down 7 +forward 3 +down 3 +down 8 +down 9 +forward 9 +forward 3 +up 4 +forward 8 +forward 8 +up 7 +up 3 +forward 6 +down 9 +up 1 +forward 2 +down 6 +up 6 +forward 2 +down 6 +down 3 +up 7 +forward 6 +down 6 +down 1 +down 5 +forward 6 +up 2 +down 2 +down 3 +down 1 +up 9 +forward 6 +up 2 +forward 2 +down 6 +up 3 +up 4 +forward 8 +up 8 +up 4 +down 7 +down 4 +up 9 +forward 9 +up 6 +forward 5 +forward 7 +forward 2 +forward 8 +down 7 +down 5 +down 4 +up 3 +forward 7 +down 2 +forward 5 +forward 9 +forward 4 +forward 7 +forward 8 +up 6 +down 1 +forward 3 +forward 9 +forward 1 +down 8 +down 1 +down 3 +down 1 +down 1 +up 3 +down 5 +up 1 +down 8 +down 2 +down 8 +down 3 +forward 2 +forward 8 +forward 4 +down 8 +down 6 +forward 8 +down 7 +forward 8 +forward 2 +forward 6 +forward 6 +forward 4 +up 2 +forward 3 +up 8 +forward 7 +forward 4 +down 8 +down 3 +down 4 +up 8 +forward 5 +forward 3 +up 4 +up 2 +down 6 +forward 4 +up 8 +up 3 +up 8 +down 3 +up 1 +forward 2 +down 4 +down 4 +down 9 +down 5 +forward 9 +up 6 +up 5 +down 8 +down 6 +down 7 +forward 8 +forward 4 +up 4 +forward 1 +down 4 +up 4 +down 9 +up 6 +down 9 +up 3 +forward 4 +down 1 +down 5 +down 5 +up 1 +down 8 +down 9 +down 1 +forward 4 +down 8 +down 6 +down 1 +forward 2 +down 5 +up 1 +up 1 +down 1 +down 3 +down 3 +down 8 +down 6 +down 5 +down 3 +up 3 +forward 5 +down 7 +down 7 +forward 2 +forward 6 +forward 1 +down 8 +forward 2 +up 2 +forward 2 +down 2 +forward 7 +down 7 +down 9 +up 2 +up 2 +down 3 +forward 1 +down 1 +forward 5 +forward 4 +down 4 +forward 6 +forward 2 +forward 7 +forward 2 +forward 8 +down 4 +up 3 +down 3 +up 9 +down 7 +up 8 +down 1 +down 8 +up 9 +down 6 +up 5 +up 8 +down 2 +down 3 +forward 1 +down 5 +down 5 +forward 8 +down 9 +forward 7 +forward 8 +down 1 +down 2 +up 8 +down 2 +up 5 +down 3 +forward 5 +forward 6 +up 4 +up 3 +forward 5 +forward 1 +down 2 +forward 2 +down 9 +up 7 +down 2 +up 8 +forward 2 +forward 2 +up 4 +forward 5 +down 4 +up 6 +up 8 +forward 9 +up 1 +forward 9 +forward 7 +forward 3 +forward 1 +down 1 +forward 5 +forward 2 +forward 6 +forward 6 +forward 3 +forward 7 +up 7 +down 6 +down 2 +up 5 +down 5 +up 2 +forward 7 +forward 2 +down 9 +up 4 +down 5 +down 3 +forward 7 +down 2 +forward 9 +forward 6 +down 3 +down 3 +forward 6 +down 9 +forward 7 +up 5 +up 6 +down 3 +up 4 +forward 4 +up 3 +down 8 +down 9 +down 9 +down 4 +up 1 +up 2 +down 3 +forward 4 +forward 5 +down 1 +up 3 +down 8 +down 7 +forward 2 +up 4 +down 8 +forward 1 +forward 6 +up 8 +down 2 +down 6 +forward 5 +up 8 +forward 7 +down 9 +forward 9 +down 3 +forward 9 +forward 1 +forward 6 +up 7 +forward 1 +down 5 +down 8 +down 3 +forward 5 +forward 6 +down 7 +forward 4 +down 6 +forward 4 +up 4 +down 4 +forward 4 +down 9 +forward 3 +down 6 +forward 3 +down 3 +up 3 +forward 3 +down 4 +down 4 +down 4 +down 5 +forward 5 +down 9 +down 7 +down 1 +forward 5 +forward 3 +forward 8 +down 5 +forward 4 +forward 3 +down 8 +forward 1 +forward 1 +down 6 +forward 4 +down 5 +forward 8 +down 7 +forward 6 +down 7 +up 2 +forward 6 +down 7 +down 3 +down 6 +up 2 +forward 8 +forward 5 +down 6 +forward 5 +up 7 +forward 8 +down 1 +forward 2 +up 7 +down 4 +up 5 +forward 5 +forward 4 +forward 3 +down 1 +forward 8 +up 9 +down 2 +up 4 +forward 7 +up 6 +forward 3 +down 8 +forward 4 +down 2 +down 9 +forward 8 +down 5 +forward 3 +down 9 +up 1 +forward 6 +up 9 +down 7 +forward 5 +forward 3 +down 8 +down 6 +up 3 +down 5 +forward 7 +up 2 +forward 4 +up 1 +down 8 +down 7 +forward 3 +forward 1 +down 3 +down 8 +forward 7 +up 2 +down 7 +up 6 +down 7 +down 1 +down 3 +up 6 +forward 2 +down 5 +forward 1 +forward 7 +forward 2 +down 8 +down 8 +down 7 +forward 7 +forward 5 +forward 1 +forward 7 +forward 3 +down 2 +up 8 +up 4 +up 6 +down 2 +down 1 +down 5 +down 3 +forward 2 +up 1 +forward 8 +up 8 +forward 7 +up 1 +down 7 +forward 7 +forward 5 +forward 3 +up 4 +down 5 +down 5 +forward 3 +forward 9 +down 9 +up 6 +up 7 +down 7 +forward 7 \ No newline at end of file diff --git a/day02/dive.ts b/day02/dive.ts new file mode 100644 index 0000000..139f92d --- /dev/null +++ b/day02/dive.ts @@ -0,0 +1,28 @@ +export type Command = { + heading: 'forward' | 'down' | 'up' + amount: number +} + +export type Position = { + horizontal: number + depth: number +} + +export const dive = (course: Command[]): Position => + course.reduce( + ({ horizontal, depth }, { heading, amount }) => { + switch (heading) { + case 'down': + return { horizontal, depth: depth + amount } + case 'up': + return { horizontal, depth: depth - amount } + case 'forward': + return { horizontal: horizontal + amount, depth } + } + return { horizontal, depth } as Position + }, + { + horizontal: 0, + depth: 0, + } as Position, + ) diff --git a/day02/diveAim.ts b/day02/diveAim.ts new file mode 100644 index 0000000..47f24ce --- /dev/null +++ b/day02/diveAim.ts @@ -0,0 +1,26 @@ +import { Command, Position } from './dive' + +export type AimedPosition = Position & { aim: number } + +export const diveAim = ( + { heading, amount }: Command, + { horizontal, depth, aim }: AimedPosition = { + horizontal: 0, + depth: 0, + aim: 0, + }, +): AimedPosition => { + switch (heading) { + case 'down': + return { horizontal, depth, aim: aim + amount } + case 'up': + return { horizontal, depth, aim: aim - amount } + case 'forward': + return { + horizontal: horizontal + amount, + depth: depth + aim * amount, + aim, + } + } + return { horizontal, depth, aim } as AimedPosition +} diff --git a/day02/parseCommand.spec.ts b/day02/parseCommand.spec.ts new file mode 100644 index 0000000..383697f --- /dev/null +++ b/day02/parseCommand.spec.ts @@ -0,0 +1,14 @@ +import { parseCommand } from './parseCommand' + +describe('parseCommand()', () => { + it.each([ + ['forward 5', { heading: 'forward', amount: 5 }], + ['down 5', { heading: 'down', amount: 5 }], + ['forward 8', { heading: 'forward', amount: 8 }], + ['up 3', { heading: 'up', amount: 3 }], + ['down 8', { heading: 'down', amount: 8 }], + ['forward 2', { heading: 'forward', amount: 2 }], + ])('should parse the command %s into %j', (command, heading) => + expect(parseCommand(command)).toEqual(heading), + ) +}) diff --git a/day02/parseCommand.ts b/day02/parseCommand.ts new file mode 100644 index 0000000..7dc445e --- /dev/null +++ b/day02/parseCommand.ts @@ -0,0 +1,9 @@ +import { Command } from './dive' + +export const parseCommand = (command: string): Command => { + const [heading, amount] = command.split(' ') + return { + heading: heading as Command['heading'], + amount: parseInt(amount, 10), + } +} diff --git a/day02/solution.spec.ts b/day02/solution.spec.ts new file mode 100644 index 0000000..abb91c2 --- /dev/null +++ b/day02/solution.spec.ts @@ -0,0 +1,58 @@ +import { loader } from '../lib/loader' +import { dive } from './dive' +import { AimedPosition, diveAim } from './diveAim' +import { parseCommand } from './parseCommand' + +const course = loader(2)('course').map(parseCommand) + +describe('Day 2: Dive!', () => { + describe('Part 1', () => { + it('should solve the example', () => { + const course = [ + 'forward 5', + 'down 5', + 'forward 8', + 'up 3', + 'down 8', + 'forward 2', + ].map(parseCommand) + const pos = dive(course) + expect(pos.horizontal * pos.depth).toEqual(150) + }) + it('should solve the puzzle', () => { + const pos = dive(course) + expect(pos.horizontal * pos.depth).toEqual(1580000) + }) + }) + describe('Part 2', () => { + describe('it should solve the example', () => { + let pos: AimedPosition + it.each([ + // forward 5 adds 5 to your horizontal position, a total of 5. Because your aim is 0, your depth does not change. + ['forward 5', { horizontal: 5, depth: 0, aim: 0 }], + // down 5 adds 5 to your aim, resulting in a value of 5. + ['down 5', { horizontal: 5, depth: 0, aim: 5 }], + // forward 8 adds 8 to your horizontal position, a total of 13. Because your aim is 5, your depth increases by 8*5=40. + ['forward 8', { horizontal: 13, depth: 40, aim: 5 }], + // up 3 decreases your aim by 3, resulting in a value of 2. + ['up 3', { horizontal: 13, depth: 40, aim: 2 }], + // down 8 adds 8 to your aim, resulting in a value of 10. + ['down 8', { horizontal: 13, depth: 40, aim: 10 }], + // forward 2 adds 2 to your horizontal position, a total of 15. Because your aim is 10, your depth increases by 2*10=20 to a total of 60. + ['forward 2', { horizontal: 15, depth: 60, aim: 10 }], + ])('%s => %j', (command, expectedPosition) => { + pos = diveAim(parseCommand(command), pos) + expect(pos).toEqual(expectedPosition) + }) + it('should calculate the solution', () => + expect(pos.horizontal * pos.depth).toEqual(900)) + }) + it('it should solve the puzzle', () => { + const pos = course.reduce( + (position, command) => diveAim(command, position), + { horizontal: 0, depth: 0, aim: 0 } as AimedPosition, + ) + expect(pos.horizontal * pos.depth).toEqual(1251263225) + }) + }) +}) diff --git a/day02_test.ts b/day02_test.ts deleted file mode 100644 index f072c10..0000000 --- a/day02_test.ts +++ /dev/null @@ -1,268 +0,0 @@ -import { assertEquals } from "https://deno.land/std@0.208.0/assert/mod.ts"; -import { sum } from "./util/sum.ts"; - -const game1 = `Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green`; -const game2 = - `Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue`; -const game3 = - `Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red`; -const game4 = - `Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red`; -const game5 = `Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green`; - -Deno.test("Day 2: Cube Conundrum", async (t) => { - await t.step("Part 1", async (t) => { - await t.step("it should solve the sample", async (t) => { - for ( - const [game, possible] of [ - [game1, true], - [ - game2, - true, - ], - [ - game3, - false, - ], - [ - game4, - false, - ], - [game5, true], - ] as [string, boolean][] - ) { - await t.step( - `Game ${game} should be possible: ${possible}`, - () => - assertEquals( - isPossibleGame({ - red: 12, - green: 13, - blue: 14, - })(parseReveals(game)), - possible, - ), - ); - } - }); - - await t.step(`solve the sample`, () => - assertEquals( - sum( - [ - game1, - game2, - game3, - game4, - game5, - ].map(parseReveals).filter(isPossibleGame({ - red: 12, - green: 13, - blue: 14, - })).map(({ game }) => game), - ), - 8, - )); - - await t.step("it should solve", async () => - assertEquals( - sum( - (await Deno.readTextFile("./input/day02.txt")) - .split("\n") - .map(parseReveals).filter(isPossibleGame({ - red: 12, - green: 13, - blue: 14, - })).map(({ game }) => game), - ), - 2486, - )); - }); - - await t.step("Part 2", async (t) => { - await t.step("Solve the example", async (t) => { - for ( - const [game, expectedMinCubes] of [ - // In game 1, the game could have been played with as few as 4 red, 2 green, and 6 blue cubes. If any color had even one fewer cube, the game would have been impossible. - [game1, { - red: 4, - green: 2, - blue: 6, - }], - // Game 2 could have been played with a minimum of 1 red, 3 green, and 4 blue cubes. - [game2, { - red: 1, - green: 3, - blue: 4, - }], - // Game 3 must have been played with at least 20 red, 13 green, and 6 blue cubes. - [ - game3, - { - red: 20, - green: 13, - blue: 6, - }, - ], - // Game 4 required at least 14 red, 3 green, and 15 blue cubes. - [ - game4, - { - red: 14, - green: 3, - blue: 15, - }, - ], - // Game 5 needed no fewer than 6 red, 3 green, and 2 blue cubes in the bag. - [game5, { - red: 6, - green: 3, - blue: 2, - }], - ] as [string, Cubes][] - ) { - await t.step( - `min cubes for game ${game} should be ${ - JSON.stringify(expectedMinCubes) - }`, - () => - assertEquals( - minCubes(parseReveals(game)), - expectedMinCubes, - ), - ); - } - }); - - /** - * The power of the minimum set of cubes in game 1 is 48. In games 2-5 it was 12, 1560, 630, and 36, respectively. - */ - await t.step( - `Calculate power`, - async (t) => { - for ( - const [game, expectedPower] of [ - [game1, 48], - [game2, 12], - [game3, 1560], - [game4, 630], - [game5, 36], - ] as Array<[string, number]> - ) { - await t.step( - `The power of ${game} should equal ${expectedPower}`, - () => - assertEquals( - power( - minCubes( - parseReveals( - game, - ), - ), - ), - expectedPower, - ), - ); - } - }, - ); - - await t.step( - `Adding up these five powers produces the sum 2286.`, - () => - assertEquals( - sum( - [ - game1, - game2, - game3, - game4, - game5, - ].map(parseReveals).map(minCubes).map(power), - ), - 2286, - ), - ); - - await t.step("it should solve", async () => - assertEquals( - sum( - (await Deno.readTextFile("./input/day02.txt")) - .split("\n") - .map(parseReveals).map(minCubes).map(power), - ), - 87984, - )); - }); - - await t.step( - "parseReveals", - () => - assertEquals( - parseReveals( - game3, - ), - { - game: 3, - reveals: [ - { red: 20, blue: 6, green: 8 }, - { green: 13, red: 4, blue: 5 }, - { red: 1, green: 5 }, - ], - }, - ), - ); -}); - -type Cubes = { - red: number; - green: number; - blue: number; -}; - -type GameReveals = { - game: number; - reveals: Array; -}; - -/** - * Determine whether the game could have been played with the given bag contents - */ -const isPossibleGame = - (bagContents: Cubes) => ({ reveals }: GameReveals): boolean => - reveals.find((reveal) => - reveal.red > bagContents.red || reveal.blue > bagContents.blue || - reveal.green > bagContents.green - ) === undefined; -false; - -const gameIdRx = /Game (?\d+)/; -const parseReveals = (line: string): GameReveals => { - const [gameIdStr, revealsStr] = line.split(":", 2); - return { - game: parseInt(gameIdRx.exec(gameIdStr)?.groups?.gameId ?? "0", 10), - reveals: revealsStr.trim().split(";").map((cubes) => - cubes.trim().split(",").reduce((colors, colorCount) => { - const [count, color] = colorCount.trim().split(" "); - return { - [color]: parseInt(count, 10), - ...colors, - }; - }, {} as Cubes) - ), - }; -}; - -/** - * Find the maximum number of cubes needed for each color - */ -const minCubes = ({ reveals }: GameReveals): Cubes => ({ - red: reveals.reduce((min, { red }) => Math.max(red ?? min, min), 0), - blue: reveals.reduce((min, { blue }) => Math.max(blue ?? min, min), 0), - green: reveals.reduce((min, { green }) => Math.max(green ?? min, min), 0), -}); - -/** - * The power of a set of cubes is equal to the numbers of red, green, and blue cubes multiplied together. - */ -const power = ({ red, green, blue }: Cubes): number => red * green * blue; diff --git a/day03/common.ts b/day03/common.ts new file mode 100644 index 0000000..5c57261 --- /dev/null +++ b/day03/common.ts @@ -0,0 +1,37 @@ +export const mostCommon = (report: string[]): string => { + const width = report[0].length + const result = [] + for (let col = 0; col < width; col++) { + const onbits = report.map((r) => r[col]).filter((b) => b === '1') + if (onbits.length >= report.length - onbits.length) { + result[col] = '1' + } else { + result[col] = '0' + } + } + return result.join('') +} + +export const leastCommon = (report: string[]): string => + mostCommon(report) + .split('') + .map((b) => (b === '1' ? '0' : '1')) // Invert + .join('') + +const findWithBitCriteria = + (getCheckBits: (report: string[]) => string) => + (report: string[], index = 0): string => { + if (report.length === 1) return report[0] + const width = report[0].length + if (index >= width) { + throw new Error('End reached.') + } + const checkBit = getCheckBits(report)[index] + return findWithBitCriteria(getCheckBits)( + report.filter((r) => r[index] === checkBit), + ++index, + ) + } + +export const mostCommonBitCriteria = findWithBitCriteria(mostCommon) +export const leastCommonBitCriteria = findWithBitCriteria(leastCommon) diff --git a/day03/report.txt b/day03/report.txt new file mode 100644 index 0000000..954f8c6 --- /dev/null +++ b/day03/report.txt @@ -0,0 +1,1000 @@ +010111111011 +010010101110 +011001001100 +001000001010 +111100101000 +111010101100 +000111101111 +010011010011 +100010111011 +101011000111 +100111101010 +101101101101 +110010110110 +100110011100 +001110011000 +011000101010 +001100111101 +100011101111 +100111011001 +011100101101 +111101000111 +111000101011 +001001000101 +010110011000 +110100100001 +010010010011 +100100100100 +011011001000 +111101011101 +101011110011 +110011101101 +001001000100 +100111101110 +101101101010 +111110101000 +111011011001 +111110101101 +110101010100 +011100110000 +000010111110 +111011111111 +010111111110 +101001110101 +001111010100 +001111110001 +000010000000 +010001101000 +100001001111 +101111000010 +000011110001 +110111101110 +000000100111 +010100000111 +011111100001 +100011110001 +101000001111 +101010111001 +001101100100 +001100111001 +001000011010 +001001111100 +011001011001 +101011001010 +100101101101 +000101011110 +101100110111 +011000010110 +110101000110 +011010100101 +110011100110 +111101000010 +111110101011 +110101100101 +101110101010 +100110001011 +000110101100 +010100001001 +010011001110 +101010010101 +101010000101 +100100001011 +010010100101 +011000111111 +001010000001 +000001100111 +010101101111 +101110000110 +100101001001 +010000101001 +001101011001 +011101111110 +011110011100 +110100110111 +000101011010 +100000010011 +011100111000 +001110101000 +001001001000 +110101011101 +000011001111 +101000011010 +100011110010 +100100010111 +110001010100 +111010100110 +101001010100 +110100111101 +111000010111 +010001111000 +000101010110 +010100000100 +001000110010 +100111001100 +111001000100 +011100001011 +100110001010 +000010100111 +001010111110 +101100110001 +010100100001 +011001110010 +010011100101 +011111010110 +111000010010 +011110110101 +110101101100 +101010110110 +000111000001 +001111111101 +110011101010 +011000110010 +101110101011 +110100001100 +001000011000 +110110110010 +101111000111 +000111111001 +111100110100 +010010011010 +010010111010 +000001101000 +000101010101 +110111110101 +111001110110 +110011001100 +011110011001 +000010110101 +011011000111 +010101010110 +001011010100 +100001111001 +011000111010 +011100010000 +110001011010 +110010110111 +001101010101 +000110011000 +000010011110 +101100111001 +100011001110 +100010000000 +001111010001 +011100010011 +010001000010 +110010010111 +011011111101 +010011010100 +100001101001 +101100110110 +000000101011 +111000110111 +111101010110 +111110000000 +101010000111 +011010110110 +100110100111 +001011001011 +110011111000 +010111100110 +001100101010 +110001001000 +000100000111 +000001011100 +000100000000 +100010100000 +110001011011 +110110111101 +100110010001 +001101001110 +011111011000 +110010000100 +100011010110 +011001100000 +010101001110 +111100000001 +110100010111 +000001000011 +101100010011 +000100011111 +111000001001 +101100011100 +010110010001 +000110000010 +110000101111 +011010011100 +111000011110 +100110110001 +100000011100 +101010001011 +010111001100 +100111110111 +111100001011 +010100100100 +100111100101 +111100000111 +101001001101 +111001111000 +001110010100 +111010011001 +010100111111 +110111010011 +100100000001 +001101111111 +111101001100 +000111101010 +000100101001 +111011011101 +010001110111 +111010100001 +001101010100 +101010011100 +000011100100 +100101101010 +011111100000 +011011001110 +000101000111 +010010111111 +001100111011 +000001101001 +001110110001 +010011011110 +001011011000 +100000111010 +001000100101 +010001100011 +011001000111 +010110101010 +101000001001 +110101011000 +001100000101 +100110011001 +000011001001 +100110111001 +111101101001 +011011001001 +010001100111 +001100011100 +011111101111 +100100111010 +101111110011 +110111001110 +000111100000 +011110000101 +111110100010 +001011001101 +110100101011 +011100001101 +111001111100 +111110100110 +000010010100 +010111110010 +001110001101 +011111010011 +110110111010 +101001110000 +011110110011 +000111011000 +010111000110 +001011100010 +001110000010 +010111000011 +010011111110 +011000010000 +101111011110 +101010000110 +011100011101 +011101101100 +100110101001 +000000011001 +100101010010 +110011010101 +010100100111 +011101011100 +011001111001 +000001001000 +001000101011 +010110111101 +100110010010 +010010010110 +000000111001 +011111110101 +011111001000 +100100011111 +000001111000 +111101010010 +101010100100 +011010111101 +000001011011 +101111100001 +100011000000 +110011001010 +000100010111 +100000010000 +101111010110 +010010010001 +101011100001 +101001011100 +001111000011 +111000100010 +001101110110 +001110111011 +100001110010 +000001110001 +111100001000 +100010011101 +000011000110 +111100100110 +000111110111 +000100111001 +011001110001 +111101010001 +110110101100 +010001011001 +001101111110 +000101111010 +110100100110 +111011001110 +110011010100 +010000100011 +011000111001 +110001110001 +101000000001 +101011000101 +011010000110 +000010111000 +010011100011 +111101101110 +001111010010 +100011011100 +111110111010 +000010110010 +101000011100 +010011101011 +110001011000 +000000010011 +001101010010 +110111111011 +111101011100 +111001010011 +110111100101 +111000111001 +001110010010 +001011101101 +110100100111 +101011100000 +011000100101 +110101010010 +000110000111 +111111001000 +000011100110 +101101110011 +001110011111 +110000101110 +110011100101 +101110100101 +001000111000 +101111000011 +100111111011 +011010101111 +101101001000 +000101101110 +111101000011 +000011000010 +000101010010 +101001011101 +110011010011 +111010010001 +110100010001 +010100001010 +110111101010 +100111000101 +101001100010 +011010011011 +101011101101 +011001100001 +001000110111 +000100101000 +010000000111 +111111110000 +001011110110 +100010010001 +100110101111 +110110010000 +100110011011 +001100110101 +100011101100 +000011011001 +010110100001 +011110101111 +101011011000 +101110111001 +111000010000 +011100000010 +100110100101 +010101011111 +100000111001 +011000111100 +101100100111 +101011111000 +111101111101 +101000100011 +101000010101 +111001010010 +101110000111 +101010000001 +000100100111 +100001011101 +110010101010 +000000100100 +011101000101 +110010001101 +111011101110 +111111111110 +011100000111 +101111110010 +000101100110 +000110001011 +100100011000 +010001101111 +011110010000 +100011011111 +010101101010 +000011100000 +000101001110 +001001110001 +111110011001 +101110000000 +010001010010 +110001000110 +101011001110 +010001101001 +000000011011 +101001010011 +011010000100 +001100001100 +100010001001 +100000111111 +001000000000 +100110110100 +100111110000 +101001110001 +000110101101 +000111001010 +101100011011 +110001101000 +000111101110 +110110010011 +100010001000 +001010001100 +001011111110 +001110000111 +110010100000 +100001110101 +000110111101 +110010011000 +111110111011 +101000000011 +011010011110 +110000001111 +011000110100 +111111001101 +000010110100 +101100001100 +110000101011 +010000001110 +101001101000 +011000000100 +101101011000 +100111111100 +110001001010 +001010101100 +111010001110 +101110100110 +011110010001 +111011111010 +000001100110 +010001100101 +100101001111 +111001001011 +111101101010 +011011000001 +010111010101 +110001111110 +110100101110 +111101011011 +011000101011 +010100111100 +011000000111 +101000101001 +111000110001 +101000110001 +001111010011 +100000010100 +001001101101 +010101110001 +100110000101 +011000101101 +001110110010 +100111000001 +011001000001 +000101101000 +101000101110 +000100001110 +111110101111 +011110110001 +101001110010 +000000111010 +101111010010 +011110011010 +101000011111 +000100001100 +110001111001 +110000110101 +111010011100 +001000111011 +111110001111 +011011011000 +000110110001 +101001010010 +111010100011 +000001111100 +110010000001 +110101111011 +100011001001 +010011100001 +101101011111 +100000001010 +001011001000 +000011100010 +011110111000 +000110111011 +010111001011 +011100011000 +101010011011 +001001011110 +000110001010 +111011010101 +010101110010 +011100101001 +100000110010 +111100111001 +001011011101 +110101101001 +001000111110 +101011000011 +001110111111 +100101010110 +111011011110 +010111111001 +011001010001 +110101111111 +110100100101 +111111110001 +010011000101 +011101101010 +101111000100 +011101000100 +001110110110 +010011011000 +000011011010 +110000000110 +001100001101 +111001111001 +100001100101 +100100010011 +111011111000 +001001111110 +101101000000 +000001100001 +001100001011 +110011011111 +010101111110 +001110011100 +111111000100 +010011000010 +101100010000 +000010110111 +110100000101 +110100010010 +111001100101 +010000010001 +101100100110 +001111101100 +011100110110 +000000111101 +001000000100 +010101101101 +100101101000 +001001010101 +000000001111 +110111110100 +000010110110 +001000000010 +011000101000 +100101001101 +010110101110 +100010110001 +010111010000 +001111011001 +000011110100 +100100111000 +011011100110 +100100010110 +000001111101 +010111011011 +110001000101 +111100010001 +101001000111 +110100010000 +001010000111 +101001110111 +010010010010 +100010111100 +001101000011 +011001110011 +000100101111 +010110011101 +001001011010 +111011101001 +111111000000 +111110000111 +110000001011 +010000110010 +011100011001 +011001100011 +001101000110 +011001011111 +100111100000 +110111010100 +101101000001 +110011101000 +001010110101 +100101010001 +101000101100 +010110001000 +111011111011 +000010010001 +010111011010 +011101101011 +001000101110 +101010100111 +001011000111 +011011010110 +110111101111 +100001110001 +100100101111 +110000010011 +011110111011 +000110000100 +110000111111 +100110101100 +001101110101 +011100000100 +001100011110 +010111010010 +001110101101 +100110001110 +100100010000 +001000001101 +011101110011 +011001100110 +110101000011 +100101001010 +111111101111 +010011000100 +100111000111 +101100101100 +010110000100 +111100000100 +000000101001 +000011110010 +011011110111 +011101110001 +111110000001 +011000011001 +100001101111 +110000011010 +110110101010 +110100110000 +111111000011 +100011100010 +100100010010 +110100011000 +000110000110 +001101001000 +101011110111 +000011110111 +001001100100 +100010110011 +100111111000 +000001111010 +110001111101 +100011111111 +111001001101 +011111101011 +101111110111 +100111000011 +010010001010 +010101101011 +011011110000 +110111000000 +010011101111 +010001010101 +111110101010 +001010101010 +001100101101 +111011000111 +101001000001 +000101000100 +010011110010 +001110100010 +110111001000 +111011001101 +111110001010 +110000100001 +000000010101 +000010011001 +011100100111 +001101111010 +000001100100 +011111101100 +110100011111 +010110000000 +001010101001 +000010010011 +111100000110 +110101000101 +010110001011 +111001001000 +010110101111 +001000000001 +111100001101 +001000110110 +110001101001 +001110001011 +111101101011 +011101111100 +100011001011 +001000001001 +000001001100 +100100110111 +111111101101 +001110100000 +001001001001 +001111001100 +101100101111 +101100110010 +101000100001 +101000010110 +100000010101 +011010011000 +101101101110 +011101001100 +101011111100 +101110101000 +110010100100 +011111011110 +110010011101 +110100100011 +111111100100 +011011011101 +011100100001 +101011110000 +001100100011 +000111111000 +110010001010 +100001001001 +110010001000 +111010001001 +010110111111 +101011001101 +101010011110 +011011110001 +101010100011 +100000110111 +100011101001 +101110010011 +101011011011 +110010010000 +011110100011 +010010110110 +100110010111 +110100000110 +101011101011 +001100010100 +101101010000 +110110001001 +010010001101 +111011010110 +111100001110 +000101111001 +100001000001 +101111101001 +100101101110 +000011001101 +000001000110 +111110001011 +000010101111 +011101101101 +000000000110 +111111101010 +101001110110 +111011000100 +001011101111 +110010111010 +110011110001 +111100011111 +110110010001 +100101110000 +010001001011 +101100010100 +110100001010 +001011101001 +110110000001 +001101001001 +100000111100 +001101101010 +010000110011 +011111101110 +110001110011 +011110011000 +000010001010 +001110000100 +000110101111 +100011111000 +100101100010 +111111110010 +101100011001 +011100100000 +100001100011 +001010011110 +111100011010 +010110100010 +101110010010 +001011110010 +100010111000 +001100110010 +001001101001 +011111101101 +101100111100 +011010011101 +101011100100 +111000001000 +010111011100 +001010000000 +011110000110 +110101101110 +000111000101 +101001011010 +110010100010 +100101110010 +000101100100 +010100110010 +011001000010 +110010011010 +010100001011 +011001111110 +011000101001 +011101011011 +010010000111 +000001110111 +100010101001 +111100011101 +100010001011 +111100101100 +011111010101 +111100101110 +111101001110 +111000010110 +000000110110 +011110000001 +000111011110 +111010111010 +101010001101 +111110101100 +000111110010 +110000111101 +111101110101 +101010101100 +101110110010 +110110011010 +111110110001 +011101111011 +101011111011 +100111101101 +000110011001 +100101101011 +110101101101 +010111110100 +001111110010 +101010101000 +011001100100 +101011111111 +001001000001 +010100100110 +111100011100 +011100011010 +000011011110 +001011101010 +010010001110 +101101101111 +000101000010 +010111100010 +010010010000 +111000000101 +010001100010 +101100001111 +011110111100 +100011000010 +010100001111 +011100101110 +011000111110 +111101010000 +110100111000 +001010001111 +111100011011 +101000111110 +100000011011 +010110000001 +001111100111 +001111101111 +011001011100 +111001000011 +110011101111 +001101100011 +101100111111 +011111101010 +010000011110 +001111111111 +010001001001 +111010101000 +110100001001 +111111010111 +000101110100 +101101100000 +001101100001 +001111111000 +100111101001 +000110010001 +100011101011 +000010000101 +101010001100 +000111110011 +001010110001 +111110001110 +010011100010 +100011010000 +100001010010 +100011000101 +110011000100 +010000010000 +110100110011 +100011000111 +010111101010 +101011000010 +110000101100 +111100001111 +000110100001 +010010110001 +111000100110 +000110111110 +100101000000 +011101001010 +101111011011 +111011101111 +000000010100 +110011101110 +111001110111 +011111000111 +111111011100 +110010011111 +111111110111 +001110110011 +000010010010 +100100100001 +111010000101 +001001110011 +101001101111 +101110101110 +101000101111 \ No newline at end of file diff --git a/day03/solution.spec.ts b/day03/solution.spec.ts new file mode 100644 index 0000000..e83c2e8 --- /dev/null +++ b/day03/solution.spec.ts @@ -0,0 +1,59 @@ +import { loader } from '../lib/loader' +import { + leastCommon, + leastCommonBitCriteria, + mostCommon, + mostCommonBitCriteria, +} from './common' + +const example = [ + '00100', + '11110', + '10110', + '10111', + '10101', + '01111', + '00111', + '11100', + '10000', + '11001', + '00010', + '01010', +] + +const report = loader(3)('report') + +describe('Day 3: Binary Diagnostic', () => { + describe('Part 1', () => { + it('should solve the example', () => { + const gamma = mostCommon(example) + const epsilon = leastCommon(example) + expect(gamma).toEqual('10110') + expect(epsilon).toEqual('01001') + expect(parseInt(gamma, 2) * parseInt(epsilon, 2)).toEqual(198) + }) + it('should solve the puzzle', () => { + const gamma = mostCommon(report) + const epsilon = leastCommon(report) + expect(parseInt(gamma, 2) * parseInt(epsilon, 2)).toEqual(3309596) + }) + }) + describe('Part 2', () => { + it('should solve the example', () => { + const oxygenGeneratorRating = mostCommonBitCriteria(example) + expect(oxygenGeneratorRating).toEqual('10111') + const co2ScrubberRating = leastCommonBitCriteria(example) + expect(co2ScrubberRating).toEqual('01010') + expect( + parseInt(oxygenGeneratorRating, 2) * parseInt(co2ScrubberRating, 2), + ).toEqual(230) + }) + it('should solve the puzzle', () => { + const oxygenGeneratorRating = mostCommonBitCriteria(report) + const co2ScrubberRating = leastCommonBitCriteria(report) + expect( + parseInt(oxygenGeneratorRating, 2) * parseInt(co2ScrubberRating, 2), + ).toEqual(2981085) + }) + }) +}) diff --git a/day03_test.ts b/day03_test.ts deleted file mode 100644 index 53d0571..0000000 --- a/day03_test.ts +++ /dev/null @@ -1,201 +0,0 @@ -import { assertEquals } from "https://deno.land/std@0.208.0/assert/assert_equals.ts"; -import { sum } from "./util/sum.ts"; - -/** - * Here is an example engine schematic: - */ -const schematics = [ - `467..114..`, - `...*......`, - `..35..633.`, - `......#...`, - `617*......`, - `.....+.58.`, - `..592.....`, - `......755.`, - `...$.*....`, - `.664.598.1`, -]; - -Deno.test("Day 3: Gear Ratios", async (t) => { - await t.step("Part 1", async (t) => { - await t.step("Example", async (t) => { - await t.step( - "findPartNumbers()", - () => - assertEquals(findPartNumbers(schematics), [ - { n: 467, s: [{ s: "*", col: 3, row: 1 }] }, - { n: 35, s: [{ s: "*", col: 3, row: 1 }] }, - { n: 633, s: [{ s: "#", col: 6, row: 3 }] }, - { n: 617, s: [{ s: "*", col: 3, row: 4 }] }, - { n: 592, s: [{ s: "+", col: 5, row: 5 }] }, - { n: 755, s: [{ s: "*", col: 5, row: 8 }] }, - { n: 664, s: [{ s: "$", col: 3, row: 8 }] }, - { n: 598, s: [{ s: "*", col: 5, row: 8 }] }, - ]), - ); - - await t.step( - `Calculate the example solution`, - () => - assertEquals( - sum(findPartNumbers(schematics).map(({ n }) => n)), - 4361, - ), - ); - }); - - await t.step("Solution", async () => { - const numbers = findPartNumbers( - (await Deno.readTextFile("./input/day03.txt")).split("\n"), - ); - assertEquals(sum(numbers.map(({ n }) => n)), 529618); - }); - }); - - /** - * A gear is any * symbol that is adjacent to exactly two part numbers. - * Its gear ratio is the result of multiplying those two numbers together. - * - * In this schematic, there are two gears. The first is in the top left; - * it has part numbers 467 and 35, so its gear ratio is 16345. The second - * gear is in the lower right; its gear ratio is 451490. - * - * Adding up all of the gear ratios produces 467835. - */ - await t.step("Part 2", async (t) => { - await t.step(`Solve example`, () => - assertEquals( - sum(findGears(schematics).map(([g1, g2]) => g1 * g2)), - 467835, - )); - - await t.step("Solution", async () => - assertEquals( - sum( - findGears( - (await Deno.readTextFile("./input/day03.txt")).split("\n"), - ).map(([g1, g2]) => g1 * g2), - ), - 77509019, - )); - }); -}); - -/** - * Find the part numbers in the schematics and the adjacent symbol(s) - * - * TODO: refactor to search for symbols first and then numbers. This will make the code work better for part 2. - */ -const findPartNumbers = ( - schematics: string[], -): { n: number; s: Symbol[] }[] => { - const numbers: { n: number; s: Symbol[] }[] = []; - let currentNumber: string[] = []; - let adjacentSymbols: Symbol[] = []; - - // Add parsed number with symbols to stash - const addNumber = () => { - if (currentNumber.length > 0) { - numbers.push({ - n: parseInt(currentNumber.join(""), 10), - s: adjacentSymbols - // Remove duplicate symbols - .reduce(uniqueSymbols, []), - }); - } - currentNumber = []; - adjacentSymbols = []; - }; - - for (let row = 0; row < schematics.length; row++) { - for (let col = 0; col < schematics[row].length; col++) { - const c = schematics[row][col]; - if (/\d/.test(c)) { - // Current symbol is a number - currentNumber.push(c); - const s = findAdjacentSymbols(schematics, row, col); - if (s !== undefined) adjacentSymbols.push(...s); - } else { - addNumber(); - } - } - } - addNumber(); - return numbers.filter(({ s }) => s.length > 0); -}; - -type Symbol = { s: string; col: number; row: number }; - -/** - * Find adjacent symbols for a given field - */ -const findAdjacentSymbols = ( - schematics: string[], - row: number, - col: number, -): Symbol[] => - [ - findSymbolAt(schematics, row, col - 1), // left - findSymbolAt(schematics, row - 1, col - 1), // top left - findSymbolAt(schematics, row - 1, col), // top - findSymbolAt(schematics, row - 1, col + 1), // top right - findSymbolAt(schematics, row, col + 1), // right - findSymbolAt(schematics, row + 1, col + 1), // bottom right - findSymbolAt(schematics, row + 1, col), // bottom - findSymbolAt(schematics, row + 1, col - 1), // bottom left - ].filter((s): s is Symbol => s?.s !== undefined); - -/** - * Return the symbol at a given position - */ -const findSymbolAt = ( - schematics: string[], - row: number, - col: number, -): Symbol | undefined => { - if (col < 0) return undefined; // Outside of schematics - if (row < 0) return undefined; // Outside of schematics - const c = schematics[row]?.[col]; - if (/\d/.test(c)) return undefined; // a number - if (c === ".") return undefined; // a dot, ignore - return { - s: c, - col, - row, - }; -}; - -const findGears = (schematics: string[]) => { - const parts = findPartNumbers(schematics); - // From the known part numbers - return ( - parts - // ... find the symbols with "*" - .filter(({ s }) => s.find(({ s }) => s === "*")) - // ... and extract the symbol - .map(({ s }) => s) - .flat() - // Remove duplicates - .reduce(uniqueSymbols, []) - .reduce>((gears, symbol) => { - // Find the part numbers with this symbol - const matchingParts = parts.filter(({ s }) => - s.find(({ col, row }) => col === symbol.col && row === symbol.row) - ); - return matchingParts.length === 2 - ? [...gears, matchingParts.map(({ n }) => n) as [number, number]] - : gears; - }, []) - ); -}; - -const uniqueSymbols = (symbols: Symbol[], symbol: Symbol) => { - if ( - symbols.find(({ col, row }) => col === symbol.col && row === symbol.row) === - undefined - ) { - return [...symbols, symbol]; - } - return symbols; -}; diff --git a/day04/board.spec.ts b/day04/board.spec.ts new file mode 100644 index 0000000..760f4a1 --- /dev/null +++ b/day04/board.spec.ts @@ -0,0 +1,39 @@ +import { isWinning } from './board' + +describe('Board', () => { + it.each([ + [[[0]], [1], false], + [[[0]], [1, 0], true], + [ + [ + [0, 1, 2], + [3, 4, 5], + [6, 7, 8], + ], + [1, 0, 3], + false, + ], + // Winning row + [ + [ + [0, 1, 2], + [3, 4, 5], + [6, 7, 8], + ], + [0, 1, 2], + true, + ], + // Winning col + [ + [ + [0, 1, 2], + [3, 4, 5], + [6, 7, 8], + ], + [8, 6, 5, 3, 2], + true, + ], + ])('board %j should win with numbers %j: %b', (board, numbers, winning) => + expect(isWinning(board, numbers)).toEqual(winning), + ) +}) diff --git a/day04/board.ts b/day04/board.ts new file mode 100644 index 0000000..d9edef9 --- /dev/null +++ b/day04/board.ts @@ -0,0 +1,37 @@ +export type Board = number[][] + +export const isWinning = (board: Board, numbers: number[]): boolean => { + // Check winning rows + for (const row of board) { + const rowIsWinning = row.reduce((rowIsWinning, number) => { + if (!rowIsWinning) return false + return numbers.includes(number) + }, true) + if (rowIsWinning) return true + } + // Check winning cols + for (let colIndex = 0; colIndex < board[0].length; colIndex++) { + const col = board.map((row) => row[colIndex]) + const colIsWinning = col.reduce((colIsWinning, number) => { + if (!colIsWinning) return false + return numbers.includes(number) + }, true) + if (colIsWinning) return true + } + return false +} + +export const findUnmarkedNumbers = ( + board: Board, + calledNumbers: number[], +): number[] => { + const unmarkedNumbers: number[] = [] + for (const row of board) { + for (const num of row) { + if (!calledNumbers.includes(num)) unmarkedNumbers.push(num) + } + } + return unmarkedNumbers +} + +export const sum = (sum: number, add: number): number => sum + add diff --git a/day04/findWinningBoard.ts b/day04/findWinningBoard.ts new file mode 100644 index 0000000..3cdd44b --- /dev/null +++ b/day04/findWinningBoard.ts @@ -0,0 +1,20 @@ +import { Board, isWinning } from './board' + +export const findWinningBoard = ( + boards: Board[], + numbers: number[], +): { winningBoard?: Board; drawnNumbers: number[] } => + numbers.reduce( + ({ winningBoard, drawnNumbers }, number) => { + if (winningBoard !== undefined) return { winningBoard, drawnNumbers } + drawnNumbers.push(number) + return { + winningBoard: boards.find((b) => isWinning(b, drawnNumbers)), + drawnNumbers, + } + }, + { drawnNumbers: [] } as { + winningBoard?: Board + drawnNumbers: number[] + }, + ) diff --git a/day04/input.txt b/day04/input.txt new file mode 100644 index 0000000..59d8e58 --- /dev/null +++ b/day04/input.txt @@ -0,0 +1,601 @@ +4,75,74,31,76,79,27,19,69,46,98,59,83,23,90,52,87,6,11,92,80,51,43,5,94,17,15,67,25,30,48,47,62,71,85,58,60,1,72,99,3,35,42,10,96,49,37,36,8,44,70,40,45,39,0,63,2,78,68,53,50,77,20,55,38,86,54,93,26,88,12,91,95,34,9,14,33,66,41,13,28,57,29,73,56,22,89,21,64,61,32,65,97,84,18,82,81,7,16,24 + +30 46 94 20 2 +53 67 69 75 65 +27 24 85 28 60 +57 58 42 36 78 +35 98 87 91 93 + +72 71 91 73 19 + 2 13 14 8 74 +42 34 31 56 9 +82 59 44 67 79 +49 6 98 10 30 + +95 24 25 11 34 +57 65 41 92 8 +91 26 1 62 38 +47 93 4 37 0 +15 44 33 20 97 + +24 69 55 7 25 +45 64 56 71 18 +94 10 62 19 36 +53 74 49 61 80 +50 68 60 76 84 + +86 78 29 1 71 + 2 9 24 34 96 +47 75 61 13 26 +10 66 28 83 14 +91 63 45 76 50 + +61 60 22 11 95 +25 81 13 15 53 +59 89 65 18 39 +58 50 1 47 52 +48 16 29 75 56 + +62 0 93 41 53 +69 47 29 50 46 +81 8 20 38 23 + 4 64 5 37 27 +32 75 48 33 15 + +97 75 15 55 36 +98 77 76 3 69 +11 39 88 18 93 +94 99 59 50 63 +33 26 35 58 14 + +58 91 7 36 81 +44 90 46 57 93 +16 35 28 61 34 +60 3 96 65 14 +24 49 94 11 77 + + 5 91 53 85 36 + 6 64 41 7 50 +87 94 96 15 49 +18 78 37 52 75 +28 34 16 71 48 + +75 14 2 52 49 +79 37 13 53 12 +91 73 94 72 36 +48 54 3 93 5 +40 85 42 9 50 + +26 53 24 58 95 +15 54 65 80 30 +90 72 27 40 47 +81 22 57 1 17 +82 46 20 94 49 + +60 25 86 18 92 + 2 85 89 5 55 +12 71 74 46 68 +33 52 82 84 29 +76 43 40 11 31 + +21 23 93 46 60 +99 20 75 55 4 +73 9 74 92 16 +25 35 0 70 90 +27 86 42 94 15 + +69 73 42 46 53 + 5 71 50 6 74 +14 44 99 62 87 +54 84 86 94 21 +29 51 38 67 8 + +43 28 24 46 22 +61 15 4 52 17 +62 77 18 56 85 +93 60 33 71 41 +63 2 6 68 92 + +60 92 52 36 38 +66 34 26 19 25 +24 65 90 39 74 +17 97 96 7 48 +50 55 57 73 64 + +19 77 60 66 16 +41 54 5 49 6 +69 61 94 86 98 +67 37 87 71 72 +44 96 90 40 74 + +90 49 68 74 32 +31 85 42 65 53 +76 43 41 36 20 +16 75 46 47 86 +54 44 95 13 23 + +56 0 88 99 76 +10 42 96 30 14 +67 73 16 21 35 +80 41 64 40 78 +13 19 4 24 20 + +79 98 28 58 41 +24 97 85 22 89 +12 81 68 50 47 + 2 34 16 6 95 +64 51 11 43 26 + + 6 39 79 95 3 +82 9 61 80 33 +94 87 13 70 11 + 0 8 37 35 19 +62 75 84 55 93 + +44 51 54 27 94 +77 32 81 71 62 +98 91 68 41 89 + 6 39 40 56 53 +73 88 5 49 80 + +97 29 15 61 83 +46 69 51 71 17 +40 94 49 14 66 +52 20 57 62 80 +19 72 75 84 36 + +27 26 95 78 92 +98 18 31 51 45 +39 43 94 33 13 +50 16 71 30 22 +70 81 36 38 64 + +90 7 71 11 63 +25 39 61 17 46 +51 86 56 81 84 +14 33 37 23 60 +52 64 8 65 29 + +41 92 40 71 33 +90 2 24 37 25 + 0 94 74 53 69 +81 61 1 70 88 +44 34 99 29 75 + +63 39 44 3 82 +68 95 67 28 49 +22 53 76 81 47 +15 75 0 54 6 +86 37 65 52 77 + +11 64 39 47 72 +97 59 83 19 58 +12 65 92 89 28 + 9 78 40 79 99 +17 50 71 18 68 + +31 78 27 32 18 +97 20 60 68 88 +12 5 99 49 82 +35 6 87 2 61 +70 53 63 36 93 + +89 4 50 54 80 +85 36 17 5 71 +44 95 57 73 60 +46 92 25 8 59 +98 82 21 93 99 + +27 12 82 95 47 + 8 21 69 83 64 +11 7 88 26 30 +70 96 18 75 53 +28 22 56 52 29 + +56 1 30 13 53 +37 86 98 19 9 + 3 67 16 71 85 +83 79 48 54 14 +47 62 44 95 65 + +51 18 87 35 55 +52 85 79 56 82 +83 26 24 29 43 +80 76 4 45 13 +11 12 99 94 47 + +14 1 52 95 63 +54 27 67 92 98 +34 61 26 32 33 +76 77 49 83 2 +97 59 12 71 80 + +78 16 59 44 5 +73 21 53 37 50 +25 86 88 61 74 +80 30 69 56 57 +98 39 26 58 51 + +71 48 28 14 81 +69 67 6 77 47 +94 83 8 40 20 +30 58 9 99 76 +51 24 91 21 52 + +84 76 33 14 72 +37 36 25 12 34 +39 54 89 81 30 + 2 15 46 10 22 +41 75 27 66 69 + + 8 20 53 16 86 +38 99 4 11 60 +55 14 47 1 48 +51 50 69 52 37 + 3 56 32 79 68 + +69 40 17 70 98 +12 86 41 35 50 +60 44 8 20 81 +14 82 25 55 4 +87 67 85 3 5 + +72 90 14 78 94 + 2 85 91 97 42 +84 9 27 70 95 +55 56 74 73 1 +11 59 13 67 18 + + 5 84 21 73 13 +11 46 35 79 99 +57 25 48 52 2 +51 70 56 54 94 +37 62 47 43 41 + +99 30 74 11 51 +48 90 1 27 76 +71 63 28 86 10 +52 5 83 16 69 +70 93 92 73 43 + +52 70 58 95 82 +74 18 90 99 39 +12 51 71 48 47 +92 11 91 16 61 +41 62 97 68 0 + +20 32 76 50 55 + 4 70 14 36 82 +74 10 97 26 87 +61 83 56 98 71 +64 38 8 65 92 + +63 68 84 36 41 +71 44 12 77 50 +18 92 54 58 23 +89 98 72 69 25 +62 38 42 5 52 + +59 65 60 84 49 +51 69 12 15 38 +70 1 79 22 35 +66 88 85 83 32 + 3 33 78 48 16 + +79 91 35 90 77 +22 59 58 96 97 +99 84 34 2 74 +10 92 5 4 45 +53 21 42 71 56 + +43 23 45 81 34 + 1 52 7 24 51 +42 22 17 20 77 +31 21 29 19 79 +58 87 30 60 49 + +81 64 86 76 70 +44 14 43 90 2 +96 16 42 22 7 + 5 57 19 84 21 +95 74 80 28 72 + + 3 57 12 95 35 +61 72 98 39 17 +62 87 30 66 4 +26 58 16 20 47 +37 46 13 42 85 + +55 24 36 49 85 +19 39 88 73 61 + 1 60 45 72 29 +47 12 53 76 44 +28 98 70 54 0 + +77 29 17 36 96 +35 64 93 37 83 +12 10 57 82 7 +90 69 0 86 32 +74 66 72 63 97 + +53 18 82 30 4 + 6 47 28 80 71 +39 36 22 20 51 + 7 57 26 34 79 +72 10 56 89 1 + +92 20 76 27 51 +72 82 39 95 38 +19 33 70 62 26 +79 99 40 30 8 +94 80 10 91 4 + +56 21 15 54 60 +69 64 55 0 59 +39 95 98 34 99 +24 76 3 6 30 +65 45 96 82 26 + +59 55 44 79 12 +87 73 37 76 91 +68 92 51 49 36 +99 54 3 71 64 +25 60 94 45 81 + +23 67 96 86 98 +14 47 45 66 62 +73 76 74 54 50 +64 60 35 10 58 +99 81 34 9 13 + +71 44 19 13 2 +18 80 24 11 85 +36 1 99 26 52 +48 76 84 88 63 +61 30 49 86 35 + +20 85 55 47 99 +18 49 38 65 61 +37 48 32 6 15 +80 94 66 89 91 + 1 44 36 92 21 + +72 65 4 76 16 +80 97 15 56 33 +14 40 50 11 57 +34 37 68 88 44 + 6 38 21 49 7 + +39 80 87 32 21 +41 97 66 15 83 +68 69 28 88 62 +18 2 48 58 77 +63 64 17 13 95 + +44 3 41 55 85 +83 75 13 0 81 +95 9 23 8 26 +71 94 37 70 45 +77 82 62 87 19 + +65 16 30 91 52 +78 67 24 58 11 +75 47 90 0 8 +83 88 73 60 2 +46 59 77 32 19 + +82 80 0 24 85 +92 99 50 94 38 +19 98 10 51 32 +36 73 67 43 57 +46 21 13 69 37 + +89 94 78 1 9 +16 34 18 15 38 +69 82 35 92 27 +66 64 68 63 26 +62 21 65 36 71 + +15 4 25 50 41 +69 98 12 74 21 + 2 13 66 55 83 +93 90 23 27 33 +82 52 68 61 60 + +57 21 28 29 5 +67 35 19 62 68 +91 83 3 33 99 +20 30 79 50 85 +60 89 4 7 36 + +43 4 81 19 77 +89 92 46 52 35 + 1 21 2 75 88 + 8 97 26 62 71 + 9 93 30 50 66 + +42 46 38 85 82 +18 80 91 1 40 +72 81 89 51 31 +37 20 24 67 92 +32 43 95 70 84 + +90 48 63 15 45 +67 52 2 26 31 +30 13 36 77 49 +60 8 86 70 99 +94 27 85 78 34 + +76 65 22 60 55 +81 88 54 4 26 +72 39 86 12 8 +68 46 98 28 99 +45 69 21 7 35 + +47 22 34 19 95 +30 15 39 51 10 +11 37 48 44 71 + 2 89 92 78 35 +21 73 33 20 69 + + 6 70 84 25 3 +21 12 55 78 49 +80 60 98 58 83 +17 96 69 9 66 +76 59 39 86 51 + +97 60 93 22 99 + 2 4 25 45 78 +43 53 63 41 6 +64 74 16 56 28 +77 12 20 35 49 + +82 10 91 16 77 +17 85 48 24 1 +61 96 38 68 99 +41 42 25 66 56 +97 18 63 93 29 + +95 37 83 61 17 +11 15 43 6 24 + 0 28 51 87 9 +76 52 2 64 32 +85 41 99 29 7 + +11 86 3 39 80 +35 78 26 34 65 +46 79 44 64 66 +29 74 63 20 0 +92 28 41 69 50 + +99 58 15 51 28 + 1 36 45 38 34 +46 94 35 44 88 +39 20 8 59 61 + 3 4 37 14 63 + +31 91 85 61 29 +66 54 9 49 2 +81 62 70 98 38 +68 1 16 95 78 +59 52 53 21 36 + +69 59 50 48 56 +17 61 16 92 47 +63 60 62 5 3 +37 97 38 83 58 +73 18 71 19 94 + +55 9 34 57 85 +31 37 30 16 64 +44 91 94 6 7 +90 87 77 59 50 +12 79 43 17 89 + +90 53 57 28 58 +56 49 29 8 12 +77 27 62 30 82 +71 98 63 37 83 + 9 15 84 36 74 + +80 56 52 44 71 +40 5 26 28 46 +11 70 57 95 93 +85 29 21 84 35 +20 15 81 54 91 + +60 86 80 79 11 +90 82 84 48 43 +92 81 39 57 47 +64 36 4 71 9 +78 62 53 51 66 + +84 51 19 73 55 +42 18 75 96 9 +47 46 12 98 93 +62 57 24 6 74 +50 53 30 70 80 + +57 60 1 49 20 +93 0 39 6 74 +86 9 56 41 25 +53 99 83 38 80 +37 79 18 23 45 + +33 95 37 86 45 +62 65 16 3 77 + 4 14 82 61 13 +18 71 11 8 23 +50 67 35 75 76 + +43 30 48 38 86 +62 46 72 21 97 + 0 18 91 17 42 + 6 99 56 22 64 +15 25 79 13 55 + +54 34 98 43 86 +39 47 56 52 95 +62 92 6 70 29 +65 78 57 99 35 +72 55 20 88 77 + +87 97 67 99 20 +58 50 30 78 31 + 4 6 96 85 70 +80 59 77 88 93 + 9 0 90 86 3 + +18 17 81 50 8 +12 62 73 32 72 +41 90 42 11 79 + 1 7 94 13 0 +77 33 23 83 74 + +71 84 22 14 54 +98 34 56 81 33 +58 39 6 46 96 +15 7 11 13 37 +70 5 2 9 68 + +28 58 11 63 26 + 6 14 44 70 93 +32 52 60 96 3 +76 0 75 66 71 +50 54 34 30 98 + +91 26 2 53 92 +45 67 68 32 50 +80 30 15 78 73 +10 14 28 27 0 +21 38 88 22 5 + +42 11 23 88 41 +54 58 8 74 40 + 6 13 80 89 82 +81 3 5 53 76 +47 39 9 25 46 + +82 14 52 43 95 +15 37 12 58 80 +64 97 45 61 49 +71 65 29 25 9 +21 11 51 1 87 + +20 80 50 27 90 +21 35 9 40 81 +89 16 26 74 84 +29 97 88 19 32 +85 63 10 46 52 + +16 66 0 53 40 +94 42 80 86 25 +11 15 68 35 5 +60 89 41 92 79 +51 77 88 36 67 + +51 65 33 97 81 +78 96 86 64 22 +10 28 93 2 14 +71 29 92 6 62 +98 38 35 0 70 \ No newline at end of file diff --git a/day04/solution.spec.ts b/day04/solution.spec.ts new file mode 100644 index 0000000..269e119 --- /dev/null +++ b/day04/solution.spec.ts @@ -0,0 +1,93 @@ +import { loader } from '../lib/loader' +import { Board, findUnmarkedNumbers, sum } from './board' +import { findWinningBoard } from './findWinningBoard' +import { lastWinner } from './winsPerBoard' + +// Example input +const exampleBoards: Board[] = [ + [ + [22, 13, 17, 11, 0], + [8, 2, 23, 4, 24], + [21, 9, 14, 16, 7], + [6, 10, 3, 18, 5], + [1, 12, 20, 15, 19], + ], + [ + [3, 15, 0, 2, 22], + [9, 18, 13, 17, 5], + [19, 8, 7, 25, 23], + [20, 11, 10, 24, 4], + [14, 21, 16, 12, 6], + ], + [ + [14, 21, 17, 24, 4], + [10, 16, 15, 9, 19], + [18, 8, 23, 26, 20], + [22, 11, 13, 6, 5], + [2, 0, 12, 3, 7], + ], +] +const exampleNumbers = [ + 7, 4, 9, 5, 11, 17, 23, 2, 0, 14, 21, 24, 10, 16, 13, 6, 15, 25, 12, 22, 18, + 20, 8, 19, 3, 26, 1, +] + +// Puzzle input +const input = loader(4)('input') +const numbers = input[0].split(',').map((s) => parseInt(s, 10)) +const boards: Board[] = [[]] +let boardId = 0 +for (let i = 2; i < input.length; i++) { + const row = input[i] + .replace(/ +/g, ',') + .split(',') + .map((s) => parseInt(s, 10)) + if (isNaN(row[0])) { + boards[++boardId] = [] + } else { + boards[boardId].push(row) + } +} + +describe('Day 4: Giant Squid', () => { + describe('Part 1', () => { + it('should solve the example', () => { + const { winningBoard, drawnNumbers } = findWinningBoard( + exampleBoards, + exampleNumbers, + ) + + expect(winningBoard).toEqual(exampleBoards[2]) + const winningNumber = drawnNumbers[drawnNumbers.length - 1] + expect(winningNumber).toEqual(24) + expect( + findUnmarkedNumbers(winningBoard as Board, drawnNumbers).reduce(sum), + ).toEqual(188) + expect(24 * 188).toEqual(4512) + }) + it('should solve the puzzle', () => { + const { winningBoard, drawnNumbers } = findWinningBoard(boards, numbers) + const winningNumber = drawnNumbers[drawnNumbers.length - 1] + const unmarked = findUnmarkedNumbers( + winningBoard as Board, + drawnNumbers, + ).reduce(sum) + expect(winningNumber * unmarked).toEqual(38913) + }) + }) + + describe('Part 2', () => { + it('should solve the example', () => { + const { drawnNumbers, board } = lastWinner(exampleBoards, exampleNumbers) + const winningNumber = drawnNumbers[drawnNumbers.length - 1] + const unmarked = findUnmarkedNumbers(board, drawnNumbers).reduce(sum) + expect(winningNumber * unmarked).toEqual(1924) + }) + it('should solve the puzzle', () => { + const { drawnNumbers, board } = lastWinner(boards, numbers) + const winningNumber = drawnNumbers[drawnNumbers.length - 1] + const unmarked = findUnmarkedNumbers(board, drawnNumbers).reduce(sum) + expect(winningNumber * unmarked).toEqual(16836) + }) + }) +}) diff --git a/day04/winsPerBoard.ts b/day04/winsPerBoard.ts new file mode 100644 index 0000000..51c783a --- /dev/null +++ b/day04/winsPerBoard.ts @@ -0,0 +1,26 @@ +import { Board, isWinning } from './board' + +export const lastWinner = ( + boards: Board[], + numbers: number[], +): { board: Board; drawnNumbers: number[] } => { + const winsPerBoard = boards.map((board) => ({ + board, + drawnNumbers: winningNumbers(board, numbers), + })) + + return winsPerBoard.sort( + ({ drawnNumbers: a }, { drawnNumbers: b }) => b.length - a.length, + )[0] +} + +export const winningNumbers = (board: Board, numbers: number[]): number[] => { + const drawnNumbers: number[] = [] + do { + drawnNumbers.push(numbers[drawnNumbers.length]) + } while ( + !isWinning(board, drawnNumbers) && + drawnNumbers.length < numbers.length + ) + return drawnNumbers +} diff --git a/day04_test.ts b/day04_test.ts deleted file mode 100644 index 0f7ea55..0000000 --- a/day04_test.ts +++ /dev/null @@ -1,139 +0,0 @@ -import { assertEquals } from "https://deno.land/std@0.208.0/assert/assert_equals.ts"; -import { sum } from "./util/sum.ts"; -import { toNumber } from "./util/toNumber.ts"; - -const card1 = `Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53`; -const card2 = `Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19`; -const card3 = `Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1`; -const card4 = `Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83`; -const card5 = `Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36`; -const card6 = `Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11`; - -Deno.test("Day 4: Scratchcards", async (t) => { - await t.step("Part 1", async (t) => { - await t.step("Example", async (t) => { - for ( - const [card, expectedWinningNumbers, expectedPoints] of [ - [card1, [48, 83, 17, 86], 8], - [card2, [32, 61], 2], - [card3, [1, 21], 2], - [card4, [84], 1], - [card5, [], 0], - [card6, [], 0], - ] as [string, Array, number][] - ) { - await t.step( - `card ${card} should have the winning numbers ${expectedWinningNumbers}`, - () => - assertEquals(winningNumbers(card), new Set(expectedWinningNumbers)), - ); - - await t.step( - `card ${card} should score ${expectedPoints} points`, - () => assertEquals(cardScore(card), expectedPoints), - ); - } - - await t.step("Sum of pile", () => - assertEquals( - sum([card1, card2, card3, card4, card5, card6].map(cardScore)), - 13, - )); - }); - - await t.step("Solution", async () => - assertEquals( - sum( - (await Deno.readTextFile("./input/day04.txt")) - .split("\n") - .map(cardScore), - ), - 28538, - )); - }); - - await t.step("Part 2", async (t) => { - await t.step( - "Example", - () => assertEquals(play([card1, card2, card3, card4, card5, card6]), 30), - ); - await t.step("Solution", async () => - assertEquals( - play((await Deno.readTextFile("./input/day04.txt")).split("\n")), - 9425061, - )); - }); - - await t.step("parseCard()", () => - assertEquals(parseCard(card3), [ - new Set([1, 21, 53, 59, 44]), - new Set([69, 82, 63, 72, 16, 21, 14, 1]), - ])); -}); - -const winningNumbers = (cardInfo: string): Set => { - const [winningNumbers, cardNumbers] = parseCard(cardInfo); - const winners = new Set(); - for (const number of cardNumbers.values()) { - if (winningNumbers.has(number)) winners.add(number); - } - return winners; -}; -const cardScore = (cardInfo: string): number => - winningNumbers(cardInfo).size === 0 - ? 0 - : (1 * Math.pow(2, winningNumbers(cardInfo).size)) / 2; - -type CardInfo = [Set, Set]; -const parseCard = (cardInfo: string): CardInfo => { - const [, winningNumbers, cardNumbers] = - /^Card +\d+: ([\d ]+)+ \| ([\d ]+)+/.exec(cardInfo) ?? []; - return [ - new Set(winningNumbers.trim().replace(/ +/g, " ").split(" ").map(toNumber)), - new Set(cardNumbers.trim().replace(/ +/g, " ").split(" ").map(toNumber)), - ]; -}; - -const play = (pile: Array): number => { - // Prepare the processed pile - const processedPile: Record< - string, - { - instances: number; - unprocessed: number; - winners: Set; - } - > = pile.reduce( - (queue, card, i) => ({ - ...queue, - [i]: { - instances: 0, - unprocessed: 1, - winners: winningNumbers(card), - }, - }), - {}, - ); - // We only need to go over this once, because winners will never be added to - // the current or previous card - for (const [cardId, card] of Object.entries(processedPile)) { - // Mark as processed - card.instances = card.unprocessed; - const unprocessed = card.unprocessed; - card.unprocessed = 0; - // Add the card copies based on the number of winners to the unprocessed - // count of the following cards - for (let j = 0; j < card.winners.size; j++) { - const nextCardId = parseInt(cardId) + j + 1; - if (processedPile[nextCardId] !== undefined) { - processedPile[nextCardId].unprocessed += unprocessed; - } - } - } - - // Sum up all the card instances - return Object.values(processedPile).reduce( - (total, { instances }) => total + instances, - 0, - ); -}; diff --git a/day05/drawDiagram.ts b/day05/drawDiagram.ts new file mode 100644 index 0000000..bd4e7ca --- /dev/null +++ b/day05/drawDiagram.ts @@ -0,0 +1,18 @@ +import { Point } from './lineTo' + +export const drawDiagram = (points: Point[]): number[][] => { + const width = points.reduce((maxX, [x]) => (x > maxX ? x : maxX), 0) + const height = points.reduce((maxY, [, y]) => (y > maxY ? y : maxY), 0) + // Prepare canvas + const canvas = [] as number[][] + for (let y = 0; y <= height; y++) { + canvas[y] = [] + for (let x = 0; x <= width; x++) { + canvas[y][x] = 0 + } + } + for (const [x, y] of points) { + canvas[y][x] += 1 + } + return canvas +} diff --git a/day05/drawLines.ts b/day05/drawLines.ts new file mode 100644 index 0000000..d09c2dd --- /dev/null +++ b/day05/drawLines.ts @@ -0,0 +1,5 @@ +import { Line } from './line' +import { lineTo, Point } from './lineTo' + +export const drawLines = (lines: Line[]): Point[] => + lines.reduce((points, line) => [...points, ...lineTo(...line)], [] as Point[]) diff --git a/day05/input.txt b/day05/input.txt new file mode 100644 index 0000000..1dda409 --- /dev/null +++ b/day05/input.txt @@ -0,0 +1,500 @@ +593,10 -> 593,98 +777,236 -> 964,236 +650,575 -> 476,575 +120,612 -> 715,17 +508,707 -> 508,89 +98,834 -> 751,834 +623,554 -> 623,701 +929,976 -> 62,109 +368,893 -> 330,931 +495,335 -> 40,335 +44,704 -> 423,704 +683,711 -> 683,487 +26,940 -> 833,133 +961,183 -> 454,183 +301,306 -> 301,935 +973,822 -> 398,822 +639,911 -> 515,911 +861,180 -> 184,857 +31,97 -> 857,923 +966,376 -> 966,114 +881,485 -> 881,377 +930,98 -> 110,918 +841,889 -> 841,35 +512,261 -> 880,261 +48,533 -> 48,674 +207,226 -> 52,226 +823,952 -> 177,306 +331,566 -> 423,566 +422,418 -> 422,130 +699,517 -> 699,567 +757,784 -> 241,784 +508,445 -> 560,393 +866,275 -> 435,706 +74,41 -> 74,258 +386,369 -> 334,317 +240,94 -> 240,969 +851,197 -> 577,197 +28,906 -> 741,193 +286,227 -> 286,293 +849,800 -> 849,665 +736,307 -> 336,307 +69,701 -> 494,276 +421,823 -> 96,823 +121,626 -> 121,393 +318,351 -> 194,351 +670,671 -> 439,671 +603,914 -> 603,272 +61,507 -> 61,889 +266,39 -> 157,39 +543,664 -> 869,664 +382,709 -> 884,709 +499,80 -> 548,80 +489,79 -> 878,79 +695,86 -> 644,86 +987,585 -> 987,557 +287,67 -> 551,67 +975,983 -> 35,43 +707,351 -> 232,351 +529,175 -> 852,175 +32,811 -> 604,811 +106,153 -> 815,153 +195,268 -> 509,582 +50,922 -> 312,922 +220,500 -> 872,500 +473,33 -> 569,33 +858,847 -> 162,151 +937,947 -> 26,36 +726,435 -> 402,435 +686,601 -> 474,813 +764,880 -> 84,200 +850,950 -> 850,464 +413,620 -> 413,285 +893,560 -> 229,560 +149,100 -> 149,901 +358,613 -> 243,613 +202,445 -> 202,411 +127,153 -> 513,539 +147,846 -> 53,940 +139,920 -> 679,380 +913,953 -> 913,735 +339,466 -> 339,177 +113,882 -> 647,882 +18,880 -> 134,880 +897,152 -> 897,428 +473,511 -> 636,511 +880,370 -> 358,370 +400,244 -> 721,244 +419,987 -> 120,688 +872,224 -> 481,224 +335,302 -> 730,302 +961,324 -> 961,157 +769,301 -> 959,301 +829,124 -> 144,124 +523,372 -> 985,372 +520,33 -> 520,685 +554,644 -> 808,898 +82,676 -> 870,676 +303,612 -> 303,705 +338,40 -> 338,939 +836,47 -> 72,811 +371,751 -> 575,955 +929,505 -> 929,324 +273,181 -> 275,183 +347,595 -> 347,463 +95,629 -> 95,606 +809,188 -> 126,871 +857,924 -> 145,212 +668,277 -> 668,63 +700,904 -> 700,45 +814,899 -> 22,899 +205,98 -> 714,607 +943,28 -> 40,931 +282,620 -> 773,129 +424,803 -> 285,803 +688,329 -> 299,329 +146,628 -> 34,628 +573,417 -> 164,826 +292,232 -> 412,112 +412,508 -> 145,508 +632,648 -> 632,92 +885,904 -> 885,513 +295,981 -> 132,818 +134,681 -> 41,681 +810,531 -> 959,531 +188,590 -> 188,215 +960,795 -> 189,24 +729,211 -> 729,833 +214,817 -> 845,817 +196,609 -> 584,609 +384,908 -> 384,101 +770,907 -> 770,530 +451,469 -> 451,812 +571,261 -> 834,261 +799,436 -> 799,983 +248,105 -> 248,879 +783,906 -> 783,903 +955,670 -> 790,670 +723,750 -> 723,429 +572,427 -> 546,427 +610,341 -> 527,341 +925,426 -> 816,317 +151,403 -> 151,684 +408,969 -> 408,369 +276,425 -> 276,75 +186,86 -> 186,758 +412,420 -> 412,531 +361,60 -> 976,60 +787,649 -> 667,769 +45,866 -> 91,866 +319,963 -> 51,963 +112,866 -> 112,747 +291,475 -> 504,475 +175,116 -> 357,116 +968,961 -> 968,213 +13,12 -> 987,986 +640,728 -> 767,728 +981,505 -> 246,505 +864,981 -> 128,981 +91,66 -> 931,906 +798,116 -> 91,823 +552,74 -> 88,538 +620,872 -> 232,872 +45,229 -> 658,229 +413,75 -> 413,436 +815,257 -> 815,686 +989,22 -> 36,975 +178,904 -> 233,849 +635,128 -> 635,96 +640,820 -> 640,313 +890,787 -> 167,64 +221,22 -> 826,22 +914,132 -> 60,986 +848,31 -> 392,487 +105,969 -> 858,969 +903,868 -> 143,108 +38,941 -> 621,358 +171,340 -> 14,497 +286,460 -> 81,255 +726,688 -> 857,819 +494,689 -> 510,689 +517,913 -> 598,913 +932,66 -> 932,431 +977,982 -> 18,23 +95,101 -> 95,278 +574,467 -> 349,467 +63,803 -> 63,882 +838,874 -> 255,874 +900,752 -> 181,33 +102,897 -> 989,10 +374,439 -> 374,277 +513,504 -> 513,885 +814,932 -> 814,407 +824,656 -> 959,521 +415,570 -> 616,570 +577,880 -> 577,181 +287,524 -> 986,524 +955,665 -> 323,665 +556,365 -> 263,658 +154,226 -> 886,226 +803,750 -> 866,750 +558,725 -> 558,395 +941,115 -> 941,150 +180,410 -> 180,874 +458,753 -> 112,753 +199,253 -> 363,253 +423,650 -> 22,650 +892,851 -> 279,238 +611,109 -> 611,198 +983,344 -> 339,988 +299,47 -> 299,934 +435,652 -> 700,387 +186,775 -> 677,284 +136,576 -> 136,368 +818,744 -> 305,744 +767,171 -> 767,431 +930,842 -> 259,171 +342,831 -> 342,601 +193,672 -> 46,525 +925,164 -> 528,164 +725,92 -> 617,200 +67,729 -> 67,739 +547,153 -> 547,245 +763,434 -> 763,509 +314,888 -> 357,888 +72,645 -> 491,645 +92,67 -> 240,67 +827,936 -> 788,897 +852,378 -> 77,378 +448,337 -> 668,337 +846,739 -> 499,739 +465,691 -> 315,541 +716,163 -> 18,861 +78,965 -> 983,60 +114,952 -> 820,246 +950,351 -> 419,882 +266,36 -> 266,482 +773,841 -> 773,66 +742,198 -> 742,46 +417,512 -> 304,625 +900,277 -> 900,338 +983,431 -> 473,941 +986,282 -> 734,30 +742,19 -> 769,19 +952,320 -> 948,324 +92,590 -> 548,590 +107,39 -> 107,696 +603,749 -> 603,26 +55,282 -> 888,282 +670,848 -> 985,533 +981,982 -> 92,93 +147,428 -> 649,930 +773,737 -> 821,785 +791,576 -> 791,852 +327,672 -> 530,469 +847,122 -> 381,122 +419,493 -> 498,572 +879,842 -> 879,239 +267,717 -> 267,869 +142,449 -> 174,417 +342,718 -> 342,397 +603,207 -> 314,207 +612,648 -> 735,771 +37,10 -> 971,944 +891,716 -> 891,86 +252,217 -> 662,627 +185,165 -> 941,921 +854,717 -> 676,717 +158,791 -> 336,791 +762,226 -> 98,890 +73,189 -> 92,189 +649,511 -> 253,115 +719,456 -> 514,251 +605,286 -> 325,286 +454,609 -> 454,489 +374,541 -> 783,541 +599,177 -> 94,682 +600,384 -> 32,384 +810,933 -> 39,162 +780,871 -> 409,871 +24,639 -> 24,316 +454,80 -> 454,95 +556,541 -> 907,541 +627,295 -> 750,295 +245,71 -> 214,102 +725,445 -> 614,445 +779,538 -> 779,390 +746,667 -> 351,272 +117,776 -> 117,660 +498,495 -> 88,905 +697,721 -> 697,919 +580,314 -> 580,166 +22,656 -> 641,37 +413,433 -> 44,802 +182,305 -> 805,928 +739,277 -> 739,499 +172,210 -> 172,259 +894,576 -> 894,322 +265,263 -> 265,437 +430,228 -> 780,578 +464,531 -> 798,531 +713,63 -> 668,63 +918,831 -> 256,169 +414,375 -> 467,375 +440,32 -> 391,32 +439,806 -> 955,806 +335,820 -> 335,279 +727,458 -> 422,458 +312,274 -> 619,581 +136,724 -> 538,322 +589,680 -> 589,850 +335,648 -> 232,545 +499,216 -> 405,216 +942,710 -> 942,455 +969,556 -> 721,556 +756,552 -> 756,902 +98,870 -> 445,870 +476,833 -> 476,269 +820,127 -> 407,127 +337,519 -> 714,519 +756,95 -> 11,840 +317,339 -> 317,286 +353,86 -> 43,86 +93,950 -> 938,105 +705,509 -> 705,319 +244,879 -> 721,402 +434,794 -> 711,517 +272,381 -> 431,381 +652,104 -> 652,587 +850,866 -> 34,50 +645,902 -> 79,336 +701,39 -> 701,295 +492,793 -> 95,396 +352,554 -> 395,554 +123,405 -> 322,206 +941,745 -> 716,520 +450,512 -> 569,631 +42,25 -> 817,800 +909,387 -> 909,863 +919,934 -> 919,546 +439,881 -> 569,881 +167,866 -> 167,669 +242,264 -> 242,694 +981,786 -> 228,33 +452,434 -> 452,660 +22,26 -> 22,29 +26,155 -> 677,806 +801,627 -> 313,627 +657,135 -> 657,270 +872,875 -> 440,443 +636,248 -> 636,338 +776,51 -> 93,51 +498,600 -> 894,600 +263,984 -> 263,807 +416,390 -> 899,873 +269,137 -> 976,137 +752,12 -> 752,617 +55,925 -> 548,925 +856,551 -> 771,551 +653,93 -> 653,587 +403,286 -> 403,417 +895,706 -> 221,32 +139,822 -> 139,928 +696,194 -> 696,143 +270,678 -> 710,678 +879,353 -> 879,360 +949,712 -> 752,712 +665,661 -> 817,661 +462,952 -> 980,434 +692,766 -> 692,478 +157,117 -> 144,117 +438,701 -> 408,701 +401,703 -> 401,724 +876,831 -> 108,63 +749,892 -> 832,892 +455,124 -> 455,776 +551,222 -> 551,372 +533,80 -> 726,80 +342,740 -> 56,740 +793,370 -> 34,370 +949,614 -> 949,623 +610,287 -> 610,760 +978,834 -> 85,834 +644,894 -> 644,341 +35,887 -> 176,887 +168,958 -> 964,162 +341,886 -> 341,470 +417,845 -> 417,702 +338,347 -> 304,313 +651,10 -> 72,10 +853,160 -> 853,85 +381,568 -> 436,623 +794,437 -> 250,437 +861,72 -> 206,72 +807,813 -> 807,827 +820,502 -> 820,329 +547,508 -> 547,773 +160,129 -> 160,175 +756,468 -> 756,80 +442,661 -> 405,661 +304,817 -> 304,765 +99,42 -> 957,900 +212,110 -> 854,752 +44,620 -> 661,620 +212,311 -> 784,883 +329,671 -> 329,908 +86,359 -> 553,826 +257,799 -> 934,122 +409,663 -> 409,367 +528,623 -> 593,688 +957,525 -> 544,938 +846,766 -> 113,33 +176,680 -> 176,102 +167,287 -> 167,929 +932,870 -> 834,968 +86,774 -> 49,774 +745,231 -> 70,906 +435,760 -> 138,463 +776,810 -> 625,810 +928,930 -> 76,78 +602,24 -> 602,688 +394,424 -> 65,424 +946,966 -> 93,113 +494,39 -> 951,39 +607,699 -> 832,699 +13,403 -> 391,403 +726,475 -> 726,29 +828,625 -> 836,617 +396,770 -> 167,770 +28,546 -> 374,200 +56,113 -> 837,894 +290,589 -> 740,139 +930,805 -> 296,171 +646,895 -> 49,895 +111,15 -> 111,497 +11,274 -> 570,833 +257,624 -> 603,624 +63,844 -> 666,844 +846,661 -> 846,464 +431,72 -> 431,674 +726,674 -> 726,40 +286,660 -> 286,909 +847,222 -> 847,861 +325,896 -> 325,416 +793,953 -> 365,953 +987,956 -> 62,31 +845,853 -> 363,371 +79,782 -> 506,782 +424,21 -> 424,369 +938,162 -> 177,923 +86,193 -> 799,906 +320,164 -> 320,654 +840,306 -> 840,711 +852,736 -> 852,690 +876,966 -> 143,233 +787,926 -> 38,177 +374,112 -> 340,112 +132,541 -> 740,541 +29,28 -> 968,967 +916,212 -> 170,958 +371,553 -> 521,403 +88,796 -> 870,796 +656,367 -> 71,367 +785,166 -> 785,427 +320,30 -> 320,549 +909,527 -> 816,620 +832,965 -> 302,965 +672,259 -> 80,259 +578,513 -> 578,243 +975,561 -> 537,123 +135,330 -> 188,330 +501,695 -> 501,573 +717,230 -> 878,230 +854,501 -> 27,501 +705,885 -> 950,885 +704,338 -> 704,630 +477,485 -> 864,485 +901,42 -> 305,638 +660,540 -> 660,546 +555,79 -> 190,79 +226,126 -> 800,700 +575,908 -> 944,908 +94,478 -> 94,746 +461,425 -> 929,893 +861,429 -> 451,19 +832,825 -> 179,172 +186,133 -> 298,133 +684,270 -> 558,270 +786,872 -> 125,872 +649,178 -> 649,595 +893,738 -> 412,257 +760,854 -> 901,713 +16,914 -> 866,64 +935,928 -> 266,259 +323,229 -> 32,229 +608,828 -> 608,49 +715,892 -> 74,251 +787,187 -> 787,903 +405,793 -> 405,183 +232,704 -> 232,389 +130,706 -> 130,657 \ No newline at end of file diff --git a/day05/line.ts b/day05/line.ts new file mode 100644 index 0000000..1d9a7f4 --- /dev/null +++ b/day05/line.ts @@ -0,0 +1,15 @@ +import { Point } from './lineTo' + +export const toNumber = (s: string): number => parseInt(s, 10) + +export type Line = [from: Point, to: Point] + +export const toLine = (s: string): Line => { + const [f, t] = s.split(' -> ') + const [x0, y0] = f.split(',').map(toNumber) + const [x1, y1] = t.split(',').map(toNumber) + return [ + [x0, y0], + [x1, y1], + ] +} diff --git a/day05/lineTo.spec.ts b/day05/lineTo.spec.ts new file mode 100644 index 0000000..1eb0ee5 --- /dev/null +++ b/day05/lineTo.spec.ts @@ -0,0 +1,26 @@ +import { lineTo, Point } from './lineTo' + +describe('lineTo', () => { + it.each([ + [ + [1, 1], + [1, 3], + [ + [1, 1], + [1, 2], + [1, 3], + ], + ], + [ + [9, 7], + [7, 7], + [ + [9, 7], + [8, 7], + [7, 7], + ], + ], + ])('should draw a line from %j to %j => %j', (from, to, expected) => + expect(lineTo(from as Point, to as Point)).toEqual(expected), + ) +}) diff --git a/day05/lineTo.ts b/day05/lineTo.ts new file mode 100644 index 0000000..fe980de --- /dev/null +++ b/day05/lineTo.ts @@ -0,0 +1,32 @@ +export type Point = [x: number, y: number] + +export const lineTo = ([x1, y1]: Point, [x2, y2]: Point): Point[] => { + const dx = x2 - x1 + const dy = y2 - y1 + const adx = Math.abs(dx) + const ady = Math.abs(dy) + const sx = dx > 0 ? 1 : -1 + const sy = dy > 0 ? 1 : -1 + const arr: Point[] = [] + let eps = 0 + if (adx > ady) { + for (let x = x1, y = y1; sx < 0 ? x >= x2 : x <= x2; x += sx) { + arr.push([x, y]) + eps += ady + if (eps << 1 >= adx) { + y += sy + eps -= adx + } + } + } else { + for (let x = x1, y = y1; sy < 0 ? y >= y2 : y <= y2; y += sy) { + arr.push([x, y]) + eps += adx + if (eps << 1 >= ady) { + x += sx + eps -= ady + } + } + } + return arr +} diff --git a/day05/linesOverlap.ts b/day05/linesOverlap.ts new file mode 100644 index 0000000..d309c17 --- /dev/null +++ b/day05/linesOverlap.ts @@ -0,0 +1,25 @@ +import { Point } from './lineTo' + +export const linesOverlap = ( + minOverlap: number, + diagram: number[][], +): { + point: Point + count: number +}[] => { + const points: { + point: Point + count: number + }[] = [] + for (let y = 0; y < diagram.length; y++) { + for (let x = 0; x < diagram[y].length; x++) { + const count = diagram[y][x] + if (count >= minOverlap) + points.push({ + count, + point: [x, y], + }) + } + } + return points +} diff --git a/day05/render.ts b/day05/render.ts new file mode 100644 index 0000000..e5bdb8a --- /dev/null +++ b/day05/render.ts @@ -0,0 +1,4 @@ +export const render = (diagram: number[][]): string => + diagram + .map((row) => row.map((n) => (n === 0 ? '.' : n.toString())).join('')) + .join('\n') diff --git a/day05/solution.spec.ts b/day05/solution.spec.ts new file mode 100644 index 0000000..9e1ead8 --- /dev/null +++ b/day05/solution.spec.ts @@ -0,0 +1,59 @@ +import { loader } from '../lib/loader' +import { drawDiagram } from './drawDiagram' +import { drawLines } from './drawLines' +import { Line, toLine } from './line' +import { linesOverlap } from './linesOverlap' + +const onlyHorizontal = ([[x1, y1], [x2, y2]]: Line): boolean => + x1 === x2 || y1 === y2 + +const example = [ + '0,9 -> 5,9', + '8,0 -> 0,8', + '9,4 -> 3,4', + '2,2 -> 2,1', + '7,0 -> 7,4', + '6,4 -> 2,0', + '0,9 -> 2,9', + '3,4 -> 1,4', + '0,0 -> 8,8', + '5,5 -> 8,2', +].map(toLine) + +const examplePart1 = example + // Only consider horizontal and vertical lines: lines where either x1 = x2 or y1 = y2. + .filter(onlyHorizontal) + +const input = loader(5)('input').map(toLine) +const inputPart1 = input.filter(onlyHorizontal) + +describe('Day 5: Hydrothermal Venture', () => { + describe('Part 1: only horizontal and vertical', () => { + it('should solve the example', () => { + const lines = drawLines(examplePart1) + const diagram = drawDiagram(lines) + const overlaps = linesOverlap(2, diagram) + expect(overlaps).toHaveLength(5) + }) + it('should solve the puzzle', () => { + const lines = drawLines(inputPart1) + const diagram = drawDiagram(lines) + const overlaps = linesOverlap(2, diagram) + expect(overlaps).toHaveLength(7468) + }) + }) + describe('Part 2: all directions', () => { + it('should solve the example', () => { + const lines = drawLines(example) + const diagram = drawDiagram(lines) + const overlaps = linesOverlap(2, diagram) + expect(overlaps).toHaveLength(12) + }) + it('should solve the puzzle', () => { + const lines = drawLines(input) + const diagram = drawDiagram(lines) + const overlaps = linesOverlap(2, diagram) + expect(overlaps).toHaveLength(22364) + }) + }) +}) diff --git a/day05_test.ts b/day05_test.ts deleted file mode 100644 index 086e645..0000000 --- a/day05_test.ts +++ /dev/null @@ -1,183 +0,0 @@ -import { assertEquals } from "https://deno.land/std@0.208.0/assert/assert_equals.ts"; -import { toNumber } from "./util/toNumber.ts"; - -Deno.test("Day 5: If You Give A Seed A Fertilizer", async (t) => { - await t.step("Part 1", async (t) => { - await t.step("Example", async (t) => { - await t.step("Map example", async (t) => { - // Consider again the example seed-to-soil map: - const seedToSoil = seedMap([ - /* - The first line has a destination range start of 50, a source range start of 98, and a range length of 2. This line means that the source range starts at 98 and contains two values: 98 and 99. The destination range is the same length, but it starts at 50, so its two values are 50 and 51. - */ - `50 98 2`, - /* - The second line means that the source range starts at 50 and contains 48 values: 50, 51, ..., 96, 97. This corresponds to a destination range starting at 52 and also containing 48 values: 52, 53, ..., 98, 99. - */ - `52 50 48`, - ]); - for ( - const [seed, soil] of [ - // With this information, you know that seed number 98 corresponds to soil number 50 and that seed number 99 corresponds to soil number 51. - [98, 50], - [99, 51], - // So, seed number 53 corresponds to soil number 55. - [53, 55], - // Any source numbers that aren't mapped correspond to the same destination number. So, seed number 10 corresponds to soil number 10. - [10, 10], - // With this map, you can look up the soil number required for each initial seed number: - [79, 81], - [14, 14], - [55, 57], - [13, 13], - ] - ) { - await t.step( - `Seed number ${seed} corresponds to soil number ${soil}`, - () => assertEquals(seedToSoil(seed), soil), - ); - } - }); - - await t.step("Almanac example", async () => { - const example = almanac( - (await Deno.readTextFile("./input/day05.example.txt")).split("\n"), - ); - - /* - Using these maps, find the lowest location number that corresponds to any of the initial seeds. To do this, you'll need to convert each seed number through other categories until you can find its corresponding location number. In this example, the corresponding types are: - */ - assertEquals(example, new Set([82, 43, 86, 35])); - - // So, the lowest location number in this example is 35. - assertEquals(lowest(example), 35); - }); - }); - - await t.step("Solution", async () => { - const solution = almanac( - (await Deno.readTextFile("./input/day05.txt")).split("\n"), - ); - assertEquals(lowest(solution), 403695602); - }); - }); - - await t.step("Part 2", async (t) => { - await t.step("Example", async () => { - const example = lowestSeedRange( - (await Deno.readTextFile("./input/day05.example.txt")).split("\n"), - ); - assertEquals(example, 46); - }); - /** - * FIXME: Completes after ~5 minutes - * This should be optimizable by - * - combining all the maps into one final map - * - reverting the algorithm to start at the lowest positions until a matching seed is found. - await t.step("Solution", async () => { - const solution = lowestSeedRange( - (await Deno.readTextFile("./input/day05.txt")).split("\n") - ); - assertEquals(solution, 219529182); - }); - */ - }); -}); - -const lowest = (numbers: Set) => Math.min(...numbers.values()); - -const rangeRx = - /^(?\d+) (?\d+) (?\d+)$/; - -const seedMap = (ranges: string[]) => { - // Parse the lines - const r = ranges - .map( - (range) => - Object.values(rangeRx.exec(range)?.groups ?? {}).map((s) => - parseInt(s, 10) - ) as [number, number, number], - ) - .map(([destRangeStart, sourceRangeStart, rangeLength]) => ({ - destRangeStart, - sourceRangeStart, - // Calculate the end of the range - sourceRangeEnd: sourceRangeStart + rangeLength, - rangeLength, - })); - return (seed: number): number => { - // find a matching range - const range = r.find( - ({ sourceRangeStart, sourceRangeEnd }) => - sourceRangeStart <= seed && sourceRangeEnd >= seed, - ); - if (range === undefined) return seed; - return seed + range.destRangeStart - range.sourceRangeStart; - }; -}; - -const almanac = (almanac: string[]) => { - // Get the seeds from the first line - const seeds = almanac[0].split(":")[1].trim().split(" ").map(toNumber); - - // Read in all the map ranges - const maps = almanacToMaps(almanac); - - return mapSeeds(seeds, maps); -}; - -const lowestSeedRange = (almanac: string[]): number => { - // Get the seed pairs from the first line - const seedPairs = almanac[0] - .split(":")[1] - .trim() - .matchAll(/(\d+ \d+)+/g); - - // Read in all the map ranges - const maps = almanacToMaps(almanac); - - let lowest = Number.MAX_SAFE_INTEGER; - for (const pair of seedPairs) { - const [start, length] = pair[0].split(" ").map(toNumber); - for (let i = start; i < start + length; i++) { - lowest = Math.min( - maps.reduce((mapped, seedMap) => seedMap(mapped), i), - lowest, - ); - } - } - - return lowest; -}; - -// Pass each seed through each map -const mapSeeds = ( - seeds: number[], - maps: Array<(seed: number) => number>, -): Set => - new Set( - seeds.map((seed) => - maps.reduce((mapped, seedMap) => seedMap(mapped), seed) - ), - ); - -/** - * Parses the almanac to maps - */ -const almanacToMaps = (almanac: string[]): Array<(seed: number) => number> => { - const mapRanges: Array> = [[]]; - let i = 0; - // Skip first three lines - for (const line of almanac.slice(3)) { - if (line === "") continue; // Ignore blank lines - if (rangeRx.test(line) === false) { - // Use non-range line to start a new map - mapRanges[++i] = []; - continue; - } - mapRanges[i].push(line); - } - - // Convert to maps - return mapRanges.map(seedMap); -}; diff --git a/day06/game.spec.ts b/day06/game.spec.ts new file mode 100644 index 0000000..36e666b --- /dev/null +++ b/day06/game.spec.ts @@ -0,0 +1,64 @@ +import { countFish, progressDay } from './game' +import { Population, toPopulation } from './toPopulation' + +describe('Game', () => { + describe('progressDay()', () => { + it.each([ + [{}, {}], + // So, suppose you have a lanternfish with an internal timer value of 3: + // After one day, its internal timer would become 2. + [{ 3: 1 }, { 2: 1 }], + // After another day, its internal timer would become 1. + [{ 2: 1 }, { 1: 1 }], + // After another day, its internal timer would become 0. + [{ 1: 1 }, { 0: 1 }], + // After another day, its internal timer would reset to 6, and it would create a new lanternfish with an internal timer of 8. + [{ 0: 1 }, { 6: 1, 8: 1 }], + // After another day, the first lanternfish would have an internal timer of 5, and the second lanternfish would have an internal timer of 7. + [ + { 6: 1, 8: 1 }, + { 5: 1, 7: 1 }, + ], + ])( + 'should advance the day by one and calculate the new population from %j => %j', + (population, expectedPopulation) => + expect(progressDay(population as Population)).toEqual( + expectedPopulation, + ), + ) + // Longer example + let p: Population = toPopulation([3, 4, 3, 1, 2]) + it.each([ + [[2, 3, 2, 0, 1]], + [[1, 2, 1, 6, 0, 8]], + [[0, 1, 0, 5, 6, 7, 8]], + [[6, 0, 6, 4, 5, 6, 7, 8, 8]], + [[5, 6, 5, 3, 4, 5, 6, 7, 7, 8]], + [[4, 5, 4, 2, 3, 4, 5, 6, 6, 7]], + [[3, 4, 3, 1, 2, 3, 4, 5, 5, 6]], + [[2, 3, 2, 0, 1, 2, 3, 4, 4, 5]], + [[1, 2, 1, 6, 0, 1, 2, 3, 3, 4, 8]], + [[0, 1, 0, 5, 6, 0, 1, 2, 2, 3, 7, 8]], + [[6, 0, 6, 4, 5, 6, 0, 1, 1, 2, 6, 7, 8, 8, 8]], + [[5, 6, 5, 3, 4, 5, 6, 0, 0, 1, 5, 6, 7, 7, 7, 8, 8]], + [[4, 5, 4, 2, 3, 4, 5, 6, 6, 0, 4, 5, 6, 6, 6, 7, 7, 8, 8]], + [[3, 4, 3, 1, 2, 3, 4, 5, 5, 6, 3, 4, 5, 5, 5, 6, 6, 7, 7, 8]], + [[2, 3, 2, 0, 1, 2, 3, 4, 4, 5, 2, 3, 4, 4, 4, 5, 5, 6, 6, 7]], + [[1, 2, 1, 6, 0, 1, 2, 3, 3, 4, 1, 2, 3, 3, 3, 4, 4, 5, 5, 6, 8]], + [[0, 1, 0, 5, 6, 0, 1, 2, 2, 3, 0, 1, 2, 2, 2, 3, 3, 4, 4, 5, 7, 8]], + [ + [ + 6, 0, 6, 4, 5, 6, 0, 1, 1, 2, 6, 0, 1, 1, 1, 2, 2, 3, 3, 4, 6, 7, 8, + 8, 8, 8, + ], + ], + ])('should calculate the new population to be %j', (expectedPopulation) => { + p = progressDay(p) + return expect(p).toEqual(toPopulation(expectedPopulation)) + }) + }) + describe('countFish', () => { + it('should count the fish in a population', () => + expect(countFish({ 6: 1, 8: 1, 0: 3 })).toEqual(5)) + }) +}) diff --git a/day06/game.ts b/day06/game.ts new file mode 100644 index 0000000..07b92fb --- /dev/null +++ b/day06/game.ts @@ -0,0 +1,25 @@ +import { Population } from './toPopulation' + +export const progressDay = (population: Population): Population => + Object.entries(population).reduce((population, [days, amount]) => { + const newTimer = parseInt(days, 10) - 1 + if (newTimer < 0) { + return { + ...population, + 6: amount + (population[6] ?? 0), + 8: amount + (population[8] ?? 0), + } + } + return { + ...population, + [newTimer]: amount + (population[newTimer] ?? 0), + } + }, {} as Population) + +export const countFish = (population: Population): number => + Object.values(population).reduce((sum, amount) => sum + amount, 0) + +export const renderPopulation = (population: Population): string => + Object.entries(population) + .map(([timer, amount]) => timer.repeat(amount).split('').join(',')) + .join(',') diff --git a/day06/solution.spec.ts b/day06/solution.spec.ts new file mode 100644 index 0000000..016f12b --- /dev/null +++ b/day06/solution.spec.ts @@ -0,0 +1,56 @@ +import { countFish, progressDay } from './game' +import { toPopulation } from './toPopulation' + +const example = [3, 4, 3, 1, 2] +const input = [ + 1, 1, 1, 3, 3, 2, 1, 1, 1, 1, 1, 4, 4, 1, 4, 1, 4, 1, 1, 4, 1, 1, 1, 3, 3, 2, + 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 3, 4, 1, 1, 4, 3, 1, 2, 3, 1, 1, 1, 5, 2, 1, 1, + 1, 1, 2, 1, 2, 5, 2, 2, 1, 1, 1, 3, 1, 1, 1, 4, 1, 1, 1, 1, 1, 3, 3, 2, 1, 1, + 3, 1, 4, 1, 2, 1, 5, 1, 4, 2, 1, 1, 5, 1, 1, 1, 1, 4, 3, 1, 3, 2, 1, 4, 1, 1, + 2, 1, 4, 4, 5, 1, 3, 1, 1, 1, 1, 2, 1, 4, 4, 1, 1, 1, 3, 1, 5, 1, 1, 1, 1, 1, + 3, 2, 5, 1, 5, 4, 1, 4, 1, 3, 5, 1, 2, 5, 4, 3, 3, 2, 4, 1, 5, 1, 1, 2, 4, 1, + 1, 1, 1, 2, 4, 1, 2, 5, 1, 4, 1, 4, 2, 5, 4, 1, 1, 2, 2, 4, 1, 5, 1, 4, 3, 3, + 2, 3, 1, 2, 3, 1, 4, 1, 1, 1, 3, 5, 1, 1, 1, 3, 5, 1, 1, 4, 1, 4, 4, 1, 3, 1, + 1, 1, 2, 3, 3, 2, 5, 1, 2, 1, 1, 2, 2, 1, 3, 4, 1, 3, 5, 1, 3, 4, 3, 5, 1, 1, + 5, 1, 3, 3, 2, 1, 5, 1, 1, 3, 1, 1, 3, 1, 2, 1, 3, 2, 5, 1, 3, 1, 1, 3, 5, 1, + 1, 1, 1, 2, 1, 2, 4, 4, 4, 2, 2, 3, 1, 5, 1, 2, 1, 3, 3, 3, 4, 1, 1, 5, 1, 3, + 2, 4, 1, 5, 5, 1, 4, 4, 1, 4, 4, 1, 1, 2, +] + +describe('Day 6: Lanternfish', () => { + describe('Part 1', () => { + it.each([ + [18, 26], + [80, 5934], + ])('should solve the example', (days, expectedAmount) => { + let population = toPopulation(example) + for (let day = 1; day <= days; day++) { + population = progressDay(population) + } + expect(countFish(population)).toEqual(expectedAmount) + }) + it('should solve the puzzle', () => { + let population = toPopulation(input) + for (let day = 1; day <= 80; day++) { + population = progressDay(population) + } + expect(countFish(population)).toEqual(372984) + }) + }) + describe('Part 2', () => { + it('should solve the example', () => { + let population = toPopulation(example) + for (let day = 1; day <= 256; day++) { + population = progressDay(population) + } + expect(countFish(population)).toEqual(26984457539) + }) + it('should solve the puzzle', () => { + let population = toPopulation(input) + for (let day = 1; day <= 256; day++) { + population = progressDay(population) + } + expect(countFish(population)).toEqual(1681503251694) + }) + }) +}) diff --git a/day06/toPopulation.spec.ts b/day06/toPopulation.spec.ts new file mode 100644 index 0000000..4c14110 --- /dev/null +++ b/day06/toPopulation.spec.ts @@ -0,0 +1,11 @@ +import { toPopulation } from './toPopulation' + +describe('toPopulation()', () => { + it('should convert the input to a population', () => + expect(toPopulation([3, 4, 3, 1, 2])).toEqual({ + 1: 1, + 2: 1, + 3: 2, + 4: 1, + })) +}) diff --git a/day06/toPopulation.ts b/day06/toPopulation.ts new file mode 100644 index 0000000..1856182 --- /dev/null +++ b/day06/toPopulation.ts @@ -0,0 +1,10 @@ +export type Population = Record + +export const toPopulation = (initial: number[]): Population => + initial.reduce( + (population, fish) => ({ + ...population, + [fish]: (population[fish] ?? 0) + 1, + }), + {} as Population, + ) diff --git a/day06_test.ts b/day06_test.ts deleted file mode 100644 index eb70f8f..0000000 --- a/day06_test.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { assertEquals } from "https://deno.land/std@0.208.0/assert/assert_equals.ts"; - -Deno.test("Day 6: Wait For It", async (t) => { - await t.step("Part 1", async (t) => { - await t.step(`Solve the example`, () => - assertEquals( - waysToWin([ - [7, 9], - [15, 40], - [30, 200], - ]), - 288, - )); - await t.step(`Solve`, () => - assertEquals( - waysToWin([ - [47, 282], - [70, 1079], - [75, 1147], - [66, 1062], - ]), - 281600, - )); - }); - await t.step("Part 2", async (t) => { - await t.step( - `Solve the example`, - () => assertEquals(waysToWin([[71530, 940200]]), 71503), - ); - await t.step( - `Solve`, - () => assertEquals(waysToWin([[47707566, 282107911471062]]), 33875953), - ); - }); -}); - -const waysToWin = (races: Array<[number, number]>): number => { - const ways: Array = []; - - for (const [time, distance] of races) { - const winningTimes: Array = []; - let lastDistance = 0; - for (let i = 1; i <= time; i++) { - const currentDistance = i * (time - i); - // Abort if distance is getting smaller and will no longer win - if (currentDistance < lastDistance && currentDistance < distance) break; - lastDistance = currentDistance; - if (currentDistance > distance) winningTimes.push(i); - } - ways.push(winningTimes.length); - } - - return ways.reduce(mul); -}; - -const mul = (total: number, n: number) => total * n; diff --git a/day07/input.txt b/day07/input.txt new file mode 100644 index 0000000..968f693 --- /dev/null +++ b/day07/input.txt @@ -0,0 +1 @@ +1101,1,29,67,1102,0,1,65,1008,65,35,66,1005,66,28,1,67,65,20,4,0,1001,65,1,65,1106,0,8,99,35,67,101,99,105,32,110,39,101,115,116,32,112,97,115,32,117,110,101,32,105,110,116,99,111,100,101,32,112,114,111,103,114,97,109,10,273,102,514,428,300,13,9,457,92,169,1654,471,479,178,158,124,354,83,705,30,80,199,632,31,840,580,1228,1597,151,1374,1665,469,43,1113,103,1,1456,132,2,618,423,824,789,145,485,585,543,694,1266,866,1276,726,680,1714,503,79,137,208,8,1447,455,33,1098,1346,1028,178,1095,21,19,52,668,29,382,1659,310,225,21,15,258,915,434,92,181,120,408,612,684,2,5,1507,127,746,203,66,4,82,440,1796,166,515,216,422,175,1643,240,100,178,375,487,134,599,581,38,101,19,882,1580,282,228,409,1124,409,255,1004,90,123,146,1130,461,84,9,1537,240,42,812,815,72,140,299,317,398,982,340,529,521,204,1137,895,912,313,27,540,638,403,188,163,133,34,1038,1597,440,200,275,2,1057,682,108,340,1096,361,2,242,464,392,432,334,955,145,275,605,858,173,375,435,3,3,784,396,324,1004,25,794,61,1358,752,31,563,23,407,886,870,501,1353,195,751,1407,10,874,31,33,589,124,403,205,225,40,1510,150,172,74,9,715,39,14,36,1775,29,1094,1007,199,4,26,301,878,751,538,33,102,109,297,236,119,195,431,34,179,827,6,204,91,594,65,255,1136,820,163,1508,388,680,968,1587,235,294,543,197,640,143,95,28,814,1053,827,167,54,606,0,823,3,340,619,195,31,216,330,287,382,676,392,5,1233,248,1000,323,872,234,316,4,112,663,113,1402,357,416,148,53,102,681,15,294,407,269,297,386,4,254,1666,454,139,1173,65,572,132,3,368,290,271,716,646,626,1727,411,196,181,1256,92,29,4,337,207,557,425,43,465,35,85,1218,241,936,247,94,1433,1002,400,624,88,1072,1048,370,101,264,78,379,27,65,672,1368,692,822,1020,317,472,1019,298,486,2,18,163,1304,994,952,455,454,661,1,473,561,313,92,425,218,29,49,618,790,615,347,462,169,275,247,1445,1880,225,1778,159,176,569,32,529,602,34,365,84,753,253,962,137,917,401,507,242,451,751,67,20,1208,411,226,829,317,283,219,154,683,30,1092,24,386,24,117,545,35,188,621,14,1453,24,892,330,337,754,407,481,906,643,552,864,808,360,704,118,368,297,1446,1348,104,1077,588,298,141,971,2,801,74,434,663,543,872,447,368,109,292,526,933,489,65,33,1061,1030,727,718,62,31,518,457,1569,815,422,187,211,1193,256,811,88,65,275,998,618,113,208,160,113,270,1085,295,20,161,117,134,1045,132,28,29,779,1108,24,801,240,184,414,79,335,98,486,195,100,302,574,561,353,8,260,1,540,584,410,1299,266,44,1120,877,252,377,849,83,547,637,827,298,1151,222,90,533,551,203,203,67,881,6,812,88,1314,178,169,576,885,767,278,1565,154,108,543,31,100,190,298,254,1478,594,644,957,177,20,1578,482,121,106,841,195,16,51,561,205,55,97,107,380,128,655,629,995,1424,1005,276,838,143,506,450,56,172,955,20,1045,253,436,1016,1106,68,540,807,265,405,301,539,1236,874,986,1092,274,1208,738,89,107,510,90,15,1402,313,712,35,222,494,125,113,290,259,274,214,70,1416,242,1312,1023,974,128,1787,91,13,992,84,673,185,375,385,0,285,135,116,105,26,103,929,733,567,294,174,82,1181,941,161,1242,387,20,882,1789,1164,1157,936,1110,1142,1308,657,931,29,603,1001,157,22,786,161,835,459,843,50,3,51,42,476,509,1214,733,1102,1011,0,832,1186,246,284,503,455,146,398,13,1109,106,90,511,1232,1837,580,285,86,1388,1199,195,225,742,194,1448,1732,309,1074,1380,251,1010,137,382,1367,490,1828,47,11,888,251,16,37,393,1407,233,5,814,780,850,22,1196,957,492,4,254,745,580,651,225,1072,872,323,618,24,303,79,7,75,11,15,65,449,205,103,836,150,111,424,786,194,1752,55,674,1469,1050,891,50,792,0,381,31,152,141,91,1521,420,18,779,450,68,929,122,106,7,142,185,355,768,581,1024,140,438,350,1838,815,977,23,663,324,30,7,408,461,40,108,203,459,530,69,120,177,962,162,1566,253,2,308,232,42,1564,1161,48,270,253,83,652,247,539,166,159,856,331,1701,970,1085,442,21,868,960,298,534,378,75,226,586,21,57,636,279,1112,63,1519,555,191,773,168,120,603,716,544,1546,378,418,149,138,1212,575,29,284,577,223,145,387,639,1204,154,613,48,116,307,341,716,3,831,987,629,1338,852,189,340,1213 \ No newline at end of file diff --git a/day07/moveCrabs.spec.ts b/day07/moveCrabs.spec.ts new file mode 100644 index 0000000..260bb35 --- /dev/null +++ b/day07/moveCrabs.spec.ts @@ -0,0 +1,11 @@ +import { moveCrabs } from './moveCrabs' + +describe('moveCrabs()', () => { + it.each([ + //[[0], 0], + [[1, 2, 3], 2], + ])( + 'should calculate the fuel needed to move the crabs %j to be %d', + (crabs, expectedFuel) => expect(moveCrabs(crabs)).toEqual(expectedFuel), + ) +}) diff --git a/day07/moveCrabs.ts b/day07/moveCrabs.ts new file mode 100644 index 0000000..a529715 --- /dev/null +++ b/day07/moveCrabs.ts @@ -0,0 +1,49 @@ +export const moveCrabs = ( + crabs: number[], + fuelCosts = (from: number, to: number) => Math.abs(from - to), +): number => { + if (crabs.length === 1) return 0 + // Find max steps to move + crabs.sort((a, b) => a - b) + const min = crabs[0] + const max = crabs[crabs.length - 1] + let maxFuel = Number.MAX_SAFE_INTEGER + for (let pos = min; pos <= max; pos++) { + // Try to move all crabs to this position + const { spentFuel } = moveCrabsToPos(crabs, pos, maxFuel, fuelCosts) + if (spentFuel < maxFuel) { + maxFuel = spentFuel + } + } + return maxFuel +} + +export type Move = [crab: number, amount: number] + +const moveCrabsToPos = ( + crabs: number[], + target: number, + maxFuel: number, + fuelCosts: (from: number, to: number) => number, +): { moves: Move[]; spentFuel: number } => { + const moves: Move[] = [] + let spentFuel = 0 + for (const crab of crabs) { + const neededFuel = fuelCosts(target, crab) + spentFuel += neededFuel + moves.push([crab, neededFuel]) + // End early + if (spentFuel > maxFuel) return { moves, spentFuel } + } + return { moves, spentFuel } +} + +export const moveCrabsWithIncreasingFuelCosts = (crabs: number[]): number => + moveCrabs(crabs, (from, to) => { + let totalFuel = 0 + const distance = Math.abs(from - to) + for (let costs = 1; costs <= distance; costs++) { + totalFuel += costs + } + return totalFuel + }) diff --git a/day07/solution.spec.ts b/day07/solution.spec.ts new file mode 100644 index 0000000..72146cc --- /dev/null +++ b/day07/solution.spec.ts @@ -0,0 +1,21 @@ +import { loader } from '../lib/loader' +import { moveCrabs, moveCrabsWithIncreasingFuelCosts } from './moveCrabs' + +const example = [16, 1, 2, 0, 4, 2, 7, 1, 2, 14] +const input = loader(7)('input')[0] + .split(',') + .map((s) => parseInt(s, 10)) + +describe('Day 7: The Treachery of Whales', () => { + describe('Part 1', () => { + it('should solve the example', () => expect(moveCrabs(example)).toEqual(37)) + it('should solve the puzzle', () => + expect(moveCrabs(input)).toEqual(344297)) + }) + describe('Part 2', () => { + it('should solve the example', () => + expect(moveCrabsWithIncreasingFuelCosts(example)).toEqual(168)) + it('should solve the puzzle', () => + expect(moveCrabsWithIncreasingFuelCosts(input)).toEqual(97164301)) + }) +}) diff --git a/day07_test.ts b/day07_test.ts deleted file mode 100644 index e3f548c..0000000 --- a/day07_test.ts +++ /dev/null @@ -1,281 +0,0 @@ -import { assertEquals } from "https://deno.land/std@0.208.0/assert/assert_equals.ts"; - -const example = [ - `32T3K 765`, - `T55J5 684`, - `KK677 28`, - `QQQJA 483`, - `KTJJT 220`, -]; - -Deno.test("Day 7: Camel Cards", async (t) => { - await t.step("Part 1", async (t) => { - const cardStrengths = [ - "A", - "K", - "Q", - "J", - "T", - "9", - "8", - "7", - "6", - "5", - "4", - "3", - "2", - ]; - - await t.step("Example", async (t) => { - await t.step( - "it should solve the example", - () => assertEquals(totalWinnings(cardStrengths, example), 6440), - ); - }); - - await t.step("Solution", async (t) => { - await t.step("it should solve", async () => - assertEquals( - totalWinnings( - cardStrengths, - (await Deno.readTextFile("./input/day07.txt")).split("\n"), - ), - 251545216, - )); - }); - - await t.step("handType()", async (t) => { - for ( - const [hand, expectedType] of [ - ["AAAAA", HandType.FiveOfAKind], - ["AA8AA", HandType.FourOfAKind], - ["23332", HandType.FullHouse], - ["TTT98", HandType.ThreeOfAKind], - ["23432", HandType.TwoPair], - ["A23A4", HandType.OnePair], - ["23456", HandType.HighCard], - [`32T3K`, HandType.OnePair], - [`KTJJT`, HandType.TwoPair], - [`KK677`, HandType.TwoPair], - [`T55J5`, HandType.ThreeOfAKind], - [`QQQJA`, HandType.ThreeOfAKind], - ] as Array<[string, HandType]> - ) { - await t.step( - `${hand} should be type ${expectedType}`, - () => assertEquals(getHandType(hand), expectedType), - ); - } - }); - - await t.step("compare()", async (t) => { - await t.step( - `33332 and 2AAAA are both four of a kind hands, but 33332 is stronger because its first card is stronger`, - () => assertEquals(compareByCards(cardStrengths)("33332", "2AAAA"), 1), - ); - await t.step( - `77888 and 77788 are both a full house, but 77888 is stronger because its third card is stronger (and both hands have the same first and second card)`, - () => assertEquals(compareByCards(cardStrengths)("77788", "77888"), -1), - ); - await t.step( - `T55J5 and QQQJA are both three of a kind. QQQJA has a stronger first card`, - () => assertEquals(compareByCards(cardStrengths)("QQQJA", "T55J5"), 1), - ); - await t.step( - `KK677 and KTJJT are both two pair. Their first cards both have the same label, but the second card of KK677 is stronger (K vs T)`, - () => assertEquals(compareByCards(cardStrengths)("KTJJT", "KK677"), -1), - ); - }); - - await t.step( - "rank()", - () => - assertEquals(example.sort(byRankAndCards(cardStrengths)), [ - // 32T3K is the only one pair and the other hands are all a stronger type, so it gets rank 1. - `32T3K 765`, - // KK677 and KTJJT are both two pair. Their first cards both have the same label, but the second card of KK677 is stronger (K vs T), so KTJJT gets rank 2 and KK677 gets rank 3. - `KTJJT 220`, - `KK677 28`, - // T55J5 and QQQJA are both three of a kind. QQQJA has a stronger first card, so it gets rank 5 and T55J5 gets rank 4. - `T55J5 684`, - `QQQJA 483`, - ]), - ); - }); - - await t.step("Part 2", async (t) => { - const cardStrengths = [ - "A", - "K", - "Q", - "T", - "9", - "8", - "7", - "6", - "5", - "4", - "3", - "2", - "J", - ]; - - await t.step("Example", async (t) => { - await t.step( - "it should solve the example", - () => - assertEquals(totalWinningsWithJoker(cardStrengths, example), 5905), - ); - }); - - await t.step("it should solve", async () => - assertEquals( - totalWinningsWithJoker( - cardStrengths, - (await Deno.readTextFile("./input/day07.txt")).split("\n"), - ), - 250384185, - )); - }); -}); - -const totalWinnings = (cardStrengths: string[], hands: string[]): number => { - const rankedHands = hands.sort(byRankAndCards(cardStrengths)); - return hands - .map(parseHandBids) - .reduce( - (total, [hand, bidAmount]) => - total + (rankedHands.indexOf(`${hand} ${bidAmount}`) + 1) * bidAmount, - 0, - ); -}; - -const totalWinningsWithJoker = ( - cardStrengths: string[], - hands: string[], -): number => { - const rankedHands = hands.sort( - byRankAndCards(cardStrengths, (hand: string) => { - let type = getHandType(hand); - const s = new Set(hand); - if (!s.has("J")) return type; // No Jokers - // Find the best possible hand - for (const card of [...s.values()].filter((c) => c !== "J")) { - let newType = getHandType(hand.replaceAll("J", card)); - type = newType < type ? newType : type; - } - return type; - }), - ); - return hands - .map(parseHandBids) - .reduce( - (total, [hand, bidAmount]) => - total + (rankedHands.indexOf(`${hand} ${bidAmount}`) + 1) * bidAmount, - 0, - ); -}; - -const parseHandBids = (handBid: string): [string, number] => { - const [hand, bid] = handBid.split(" "); - return [hand, parseInt(bid, 10)]; -}; - -const byRankAndCards = ( - cardStrengths: string[], - getHandTypeFN?: typeof getHandType, -) => { - const compareStrength = compareByCards(cardStrengths); - return (handBid1: string, handBid2: string) => { - const [hand1] = parseHandBids(handBid1); - const [hand2] = parseHandBids(handBid2); - const handType1 = (getHandTypeFN ?? getHandType)(hand1); - const handType2 = (getHandTypeFN ?? getHandType)(hand2); - if (handType1 < handType2) return 1; - if (handType1 > handType2) return -1; - return compareStrength(hand1, hand2); - }; -}; - -/** - * Every hand is exactly one type. From strongest to weakest, they are: - */ -enum HandType { - // Five of a kind, where all five cards have the same label: AAAAA - FiveOfAKind = 0, - // Four of a kind, where four cards have the same label and one card has a different label: AA8AA - FourOfAKind = 1, - // Full house, where three cards have the same label, and the remaining two cards share a different label: 23332 - FullHouse = 2, - // Three of a kind, where three cards have the same label, and the remaining two cards are each different from any other card in the hand: TTT98 - ThreeOfAKind = 3, - // Two pair, where two cards share one label, two other cards share a second label, and the remaining card has a third label: 23432 - TwoPair = 4, - // One pair, where two cards share one label, and the other three cards have a different label from the pair and each other: A23A4 - OnePair = 5, - // High card, where all cards' labels are distinct: 23456 - HighCard = 6, -} - -const getHandType = (hand: string): HandType => { - if (isFiveOfAKind(hand)) return HandType.FiveOfAKind; - if (isFourOfAKind(hand)) return HandType.FourOfAKind; - if (isFullHouse(hand)) return HandType.FullHouse; - if (isThreeOfAKind(hand)) return HandType.ThreeOfAKind; - if (isTwoPair(hand)) return HandType.TwoPair; - if (isOnePair(hand)) return HandType.OnePair; - return HandType.HighCard; -}; - -const setSize = (hand: string): number => new Set(hand).size; -const isNOfAKind = (n: number) => (hand: string) => new Set(hand).size === n; -const isFiveOfAKind = isNOfAKind(1); -const isFourOfAKind = (hand: string): boolean => { - const s = new Set(hand); - if (s.size !== 2) return false; - const [a, b] = s.values(); - const count = countCards(hand); - return count(a) === 4 || count(b) === 4; -}; -const isThreeOfAKind = (hand: string): boolean => { - if (setSize(hand) !== 3) return false; - return cardsInSets(hand)[0] === 3; -}; -const isFullHouse = isNOfAKind(2); -const isTwoPair = (hand: string): boolean => { - if (setSize(hand) !== 3) return false; - const counts = cardsInSets(hand); - return counts[0] === 2 && counts[1] === 2; -}; -const isOnePair = isNOfAKind(4); - -const countCards = (hand: string) => (card: string) => - hand.split("").filter((c) => c === card).length; - -const desc = (a: number, b: number): number => b - a; - -const cardsInSets = (hand: string): number[] => { - const count = countCards(hand); - return [...new Set(hand).values()].map(count).sort(desc); -}; - -const compareByCards = - (cardStrength: string[]) => (hand1: string, hand2: string): number => { - for (let i = 0; i < hand1.length; i++) { - const c1 = hand1[i]; - const c2 = hand2[i]; - if (c1 === c2) continue; - return compareCard(cardStrength, c1, c2); - } - return 0; - }; - -const compareCard = ( - cardStrength: string[], - card1: string, - card2: string, -): number => { - if (cardStrength.indexOf(card1) < cardStrength.indexOf(card2)) return 1; - if (cardStrength.indexOf(card1) > cardStrength.indexOf(card2)) return -1; - return 0; -}; diff --git a/day08/input.txt b/day08/input.txt new file mode 100644 index 0000000..945b08c --- /dev/null +++ b/day08/input.txt @@ -0,0 +1,200 @@ +ecbad fdeacg gaecbd gbae gfcdbea cadge fcagdb abc cfdbe ab | beag bac dacgbe aegb +gad agcfb afegcd afed gacdf gdfce ad cfdgbe cfgdeba bdcgea | gbdecf cdgeaf abcgde ad +ebadf ag efgcdab fgced edgbcf begcfa adgef gcaedf afg dgca | agcd agdc fagcbde gfa +bgaefd gfcbe fgeda dbf dafbgc dfbge bd bdgcaef dfecga ebad | dbf db edab dbf +ebfcgd fedbc adc da gafdce bdaec bdcegaf edbafc bdfa gbcea | afbcedg cedbf decfb eacbg +fdabec adefcg dcf gabcf fedgcba gdaebf dfcga gfead decg dc | beafgd fcd dfc dcf +cgfbd gfb cgfa dcgeb fg bdafge gcfbad acbfd fcdabe aefcgbd | abfdc cgfa gbf gf +dfae aeg cfeag ea fgedac fdcbega agebdc cdegf fgcedb abcfg | feda fcgba ae efcgda +eafdgb bfaceg fba bf bgdf agdecbf cdafe gabde dfbae agcdeb | bfeda ecdaf fb fab +agebf dgbcef dagc ebcgadf da dfcge egdaf dea dfecag fabecd | gefab feadg ead agdc +afbcg bdgcfe aecgf gb dcafgeb bgad agfcdb bfg bfdeca bafcd | gdba dabegfc decbagf acfdbe +ag acdgfb fecgbd edacbgf dgcfb gbad gaf ecbaf cagbf gefacd | ag cebaf gbdfce ga +ecbg gb acdbg dgceab acdegfb beadfc cfagd ecbda adfegb dbg | efdagb gebc gb bg +cdafgb gdebca edgbf becf fb fegcbd fgb egdfa cadefgb bgced | bf cbfaegd fecb fceb +bacgedf afdgb ebagf bfadec ebafcg ecabg fae fe ecfg cdabge | fe adcgebf gabef ef +cdgbaf ebadfc afcbdge gfeadc fgcde egdbf ce cagfd geac cef | dgfaec agec fgdaec ce +dcag dfeabc cba bfcdg ecdbfg egafb afgcb gcaefbd ca gfcabd | fcebdg dbegcf bcefadg gdfcb +cdgefa fdebg abfdg dba agcdf bcadfg cbadfe dabfegc acbg ab | fgadceb fbcgead bda facgd +fbg bf agbfde bgcdefa fcdb gcfebd efgcb ecgbd gefac gaedcb | cgbfe cfgbe fcaeg bgdfae +dafcg cefd fcg geafbd deagcf fcdgbea fbgcea abgdc cf gdaef | gcf fcg dfec fc +cbea gebdfa ecbgf cfgdbe afgcbe gae adgbefc eagfc ea gfdac | agbfec eacfbg ea begafc +ba dfaegb afbd gfbea cegbf caegdb fdaeg dcfgeba feagcd abg | bafge dfba feagd gceafdb +dea bgade geabf adcfbe adgebf adgf bdegacf cdebg da agcfbe | dfag dafecgb dcaegbf cedbfa +fedcag fdebgca dfeab gdcaeb be fdeag fbge fadegb aeb bcadf | eba bae ebcfgda egfda +dcfb cgf abgcf gdcab adcgfe cf dgcbfa fabeg beacgd fgdebac | cgfdab deagfc feabg cf +adbgc cabgef adec dfgbec gdbfa cbgdafe dgc begac cbaged dc | cade bgafec gdc edca +agef eac fbceg ecgbfa bcdgea fceadbg cbfda eabcf ebfdgc ea | gfae badgfce acgdeb ea +cfb cdegfa badf gcaeb dbacgf cagdf eacgfdb fcagb dfgebc fb | bf gfdebc fcgdba cafgdb +dbgfae bgfeac bc cgb gecfd facb fbega fdgbace gbefc adecbg | edafgb cbg dgeafb fabc +geafcdb ec gcedfb acgbfd ecd cedfg gaefd bcfdg ecgb dcafeb | cde dfcbge acdfgb fegcd +decab acegf bfgdec cabegf bfc aebfc cbdefga adgcfe bf bagf | aecbfgd cfb bf cfdgbea +egf gfbade dbecg gdfeb edaf cadgbf fe cfaebg bgedcfa fadbg | fe gdfabc gfdbe fdbcag +fdgecb geb gdcfeba edagf dcefga dgbac bfdgea be eadgb ebaf | fdegba caegdf deabfg dgbea +egfbad efgacb bgfea cea gaefdcb cdeagf aecfb cgeb dbfac ec | ecbaf bafedcg ce dfaebcg +gecad dbeag dfcgea bd deb eabgf eabdfgc agbdec bcad fdcgeb | edb adgfce eagbf db +gdbac cbgea cdb gadfb cd faegdb dgfc dbceagf fbcadg ecadfb | facbdg cafdbe dc gcfd +cagbe abdgcf ca fcbgea baedg gac gdbfce ecfbg aefc gcfadeb | cafe face abcge febgc +gaebd fcba debca adc dacfge cfbde afdbce dgbefc ac fbceagd | ac becfd fcdbgae cefagd +cfdgbae abcgdf afbcg aecbg eb gedac bfgcea cbef fdbage bea | eabcg gcfba be geacdbf +cbfga faeg bcfae gbcda efbdac bfgcde bdefgac gf gfc agfbec | dgaebfc bdcfaeg gfea fage +fb egacb bdacgfe afgbc cbf aebf adcgeb fbgace fedgbc cdafg | cfb cfbag ebaf fb +beafd cafbe gedfca dfebagc bceg ec fcbdag fbecga gacfb ace | bgcfad afdgbec ec efcab +abefdg bacgd ecfg fag ebfca fcgba gcefab beafdc fg agefcbd | fgec cfeba fga gf +degf adgcf edcfgba ead cbaefd bcega cafdeg ed dagce gbcdfa | ead aebdfcg agbdfc egdf +gfecdb dacfe dacgb fb facbd facedb bdf fbae bcdafeg aedfgc | bf cedaf fgacde dfb +gabdf cfbegad dbagfc decaf bgdecf aedgf eg egab gaedfb edg | eg gadfb abdgf gde +dgaf faecb bacfdg gbdac abdegc cbfgade fcbag efgcdb bfg gf | defacbg gcdfeb fgbadc bagcf +adfgcb feg aedbg fdgbc gafcebd bdgef fe fcdegb eafbcg decf | ef fdce eabgd faebcg +fb fgbde bdgefca cgbf fdb deacgb cefdgb bdafec aefdg degbc | bfcgde bdgec befcda dfb +efcgb fgcaed fcdbga fed acfdbge eadbfg edgfb de deab bfgda | fbgda ed fgdbae aebd +ecfabg dfegbac ecfbd cbdaf gceadb cgbdfa dagbc af fba gafd | fa bagfcd bafgdec af +bae dcbfag fadgebc acgbf fageb cbfega bdafce ea bfgde cega | eba efbgd eab bdecfa +dfgeacb fgcbed cfbdg gbcaed fcebg cd fced ecgbaf fdagb bdc | dc bdc bcgfde dcbfage +cgbeaf adefgb gbefcd cbfa bcfedag bfage cb ceb gcdae gcbea | ecb cb cegabf eacfdgb +gfbea adgfb dfbage fad fd agcbd defcga fdeb baecfg gcbdafe | df dgfab egbfa afegb +acedbg becgdfa dcfe gbfda gdceb bcf fc fgbdce cdgfb efcbga | fcgdb fbc bcf bcf +deb gfbdeca cead agbed dcefbg ecgdba bgacd gbfea de fdabgc | cegbfd feabg bed badfgce +acegdf cdaefbg acbgf df agced aedgbf gbedac adf cfed gfacd | dcegfa fbeagd edcf df +ecbfa dbegfc bcdga bgafedc bcadge gdcafb de bed bcade geda | caebf bdcafg eabgcd cbefa +edbcfg agedf bacgfd bdagf dfgcaeb gdabc bgf gdbaec fabc bf | bgdcef bf gbf adgcb +fg afegcb gbf aegf gbfceda fcbgad decbg fabec gcfbe bacdef | bgf dgbefca fg agfcebd +eb fgebdc dcafge bgdeacf acedf bdae fecbda ecb fcgba cbfae | efgcda facdeb eadb ebc +gbafecd bgaced cabed eg bega fgadc fadcbe dge cadge dcgbfe | edg cadbfe cfgad ageb +badc fbcgde bgfaed cb febca fbc eadcbf gceaf aebfd bdfcage | acdb fcb bcad bdac +ecgfa deafcg bcdgfea ed cdaeg acfgeb aedf ecd gcbad bgcfde | ecd befgac de cgbad +cbeda bc ecbfdag gcabdf egbdca bgce aebfdg bcd gbade dcfae | decaf gacfdb bgce cbeg +ecdgb dc dbc cfegb decf fgacbe dafcbg gbcefd bacdfge gbdea | fdabgc cd gecadbf cbfeg +afbcdg gcaef degfca ec cge aedc efadbcg fgaeb gcfad fcdbge | aefcg fcbgda ec acde +adcfgb afe acegf cdefgab dafegc aedbfc dfcga fegd ef ceagb | dafceb cdaegf gdfe fe +gacdf bedgac bgfe bg gdb feabcdg fabdeg gdbaf bfade afdbce | begf bg egbcad gdb +beda aecfdg dgfaceb fegbc gbaec cba dbfacg gaedc ba dbcage | acdegf gcbfda aedcg edab +dbce ecgab cadge fcabg bfadegc ebdafg beg eb becdag fedacg | eb be efgdba be +cagebd df agdec fegcdba abfdce gfda cdgfe gdecfa cbgfe fde | egadfc fd cgdef dfga +da dgcafb acfbeg abgd dfbec fbacg fad fdagecb egafcd bfadc | feabcg fgaceb cbfeag bfgca +dcegaf dabgcf bedac febgadc fcdaeb eagcb cdfae dab db fedb | efdagbc bfdcga ebcagfd dab +bfc facgb deagbc fgeac badf bgdac bfdgac gcadfeb bf cdfbge | abgdecf afegc efgabcd fb +afbcde da bcfdge dbecg cad dgfebac dgbac edag cgbfa baedgc | gdeabc dega abdegcf dage +abfdc fa gabdcf gcbfd dfaebcg gbfeac bdeca acf cgbfde agdf | gdfa af caf fa +cfdg bedfca cfdbeg fdceb edcbga agbfe cg fcgbe bgc gaecdbf | bfaegcd bgc bcg cg +gcdafe fgec eafdcgb agdcf cfdea dgf fcaebd gf eadgbf adcbg | efcg cfge abgdef fg +cadgf dfacb cb ebdcafg cbf ebcdgf dabfe fbaged bcea fdacbe | gdcaf gbcefd dagcf cfabed +gcbdafe acd bacegd feca ac fgbdc facdg adegbf adegf dcgeaf | ebgacdf begdfca cgdaf cad +bfdc debfac acdeg baegcf afecd afd fd beacf bfedga acdgfeb | baedfc egcafb dfa afecd +geacfb efdacg eag cagdf cdea dgebf eagdf fgbacd dbgface ea | cdae acdgf acdgf efgdb +gafced eacgf cgbfe egdca eaf af eacbgd bacefdg adcf ebafgd | dbgaef agedbc fcda geacdb +eabcg gadb acgdeb db cegabf fecad dgefcab daceb dcb cbgdfe | db dgab gdba defgbc +eacf acgdfeb dgace cgfda gbcfad ebdgc efbdga aed ae cegdfa | cfgad cgdfa ae gadfec +bfdacg gdbfc cfbadge fcagb bcfdeg adfg dgebac ga agb bfaec | fgbeacd bdgeca ag ga +fabedc ed abegfcd bdfga feacb fecd ebadf agecfb aed adcbeg | ed fcde agcbdef fadeb +afgdce ecgabdf fc debaf cadbf gdabc cgadbf cebadg gfbc fca | fgbc eafdcg ecfdbag gdcabf +gad agedcf gebfadc gafbd fbcgd da abdc begfa bcgdaf dcefbg | efdcga gbfecad befga bagfe +feg afgb abdceg ecdgaf faedbgc afbcge cebdf efbcg cbage gf | gafbcde bgecaf feg egbfc +ba fdcagb dab adcefbg edacg dfecb gdabec cgfead gbea cedab | adb abd baecd cedbf +ged acgd dg cgabdfe cedgba fdcaeb baegd adecb bagef dgcbef | edg edg cdaeb ebfcad +bgdfe dfgae eabgfdc fdaebg egb afbg fcdbe bg agdebc degacf | egb egb bge bcfedga +adbfc ceabdgf aced facedb gadfcb dbe cdfbeg fdaeb efabg de | deabfc geadcfb ed fabdc +bc badgce gecb dabcg egfcad bdfaec cdgae abgdf beagdfc bca | dcaegbf cb dcbfage gdbca +debgafc becgda bdgfca dea bcdfe dcagb ae ecgadf egba ebdac | ebgdac gdaefc bgae eagb +gbdae adegbc daf gadbf fd dgef bfacg eafdcb cgefadb eadgbf | dfgab df daf adf +gbad fbdecg bcgfea bdafc defac dgbfc cgbfad ba bafecdg fba | bcgdf ba edcgbf efgdcb +ged gfecab cgfbdea aedc agefdb aebcgd ed dbceg abgce gdcbf | ged ged aegfbc dge +gbedcf be bfe afgdb aecb decafgb cgadef aebfd dacbfe faedc | be dcegbf cadbfeg cdfaeb +adfeb ecfadgb cbdefg ebdfag efag af daf acdbfg caedb fbedg | fdgbe daf daf af +gcbefda agfebc cedaf gface fecgad dc eadfb acd cdeg gfbcda | cgfdbea acd dcfea dc +gecafd aebfgd cde gcdf gdafe adcbge ecfba cgbfade cd decfa | egfadcb gbfdace cagfed fgcd +fgcdb gefcbd agb ag dcfegab bgcfda fbadge gacf bcgda dbace | degbafc agb dcgba gab +abfgde acdgfbe gabd gfecdb dfeca abgfe fdaeg gfd dg begcfa | bdag dgab gdafebc dfcae +eadcb dbcfe dgecbaf agdcfb cf fbc cbdfea abgedc fedbg ecaf | cf bfdace fbc fcb +ad efdgc cdafbg fecadg dbcegfa fgbae gdfae fbecdg adg cdea | decgbf acgbfde gabef da +gbf cdbgfea acfeb bedfgc adgbe gfeadb cegbad fg fdag afegb | gfb bgf cbefdga cafbe +adbcf gefb agbce acfbg gbfaecd fg fcg gceafd edagbc cfaebg | beagc fdeagc gf gfc +gdfbcea cdaeb egdbc fcgdbe gc cfdage gdbfe eadbfg fcbg cge | fbdecg fcegda bfdge bagdfe +adfbgc aegdb dc ecgdab dceb cedag fcgea dac ebagdfc dfbgae | efacdgb abcgfd egdab dac +dfg eacgbd ceadg gfac cefadg fg efagd gcfdbe begdacf eabdf | afgc acegd gf fg +fe eagfbd cgfab egf cadge begacd cedf caefg ecfagd dgbfaec | adegcb fe gdecbfa ecdf +da cedabg cfegad edacb bgcfdae dbcge gabd efbdgc adc ceabf | ceagfd bcefa cgdeb da +cebgdf bgcad dgface agbecf dfceg ecdbfag ae edaf ecdag eac | eca decgbf daef acefdg +aebgcd fdgcabe gecbfa fbgec bgfad gbecdf face cab ac acgbf | bfceg ca agdefbc efbgc +cgf caedf dfgabce gf ceagb bgaf cegdab fagebc dfcgeb fcega | eabcdfg fg gfc fgadbec +egfabdc gbfaed fcdea egadb fdgecb beacdg gc cge cedag gabc | bdgcef dceag gbac acedf +ecfdgab bd cadb bdg cbgdfa dbfcge bdafg efgda acbfg afbcge | bgd bd bgd dbg +aef acbefg ebcgf ecafdb degcbf fcadg afcge gaefdcb ae bage | daegbfc fgeabdc abge beag +egdc dacgf cafegd ebfgca cadfe gc gdbfa gfc dgfcaeb dacbfe | dfgeacb gc cg fgc +ebadgf acegfd ad debgfac efdba ebdcfg gbad gdfeb beacf aed | fagdbe da adgb gebcfda +gecfb ebadcf gbdcae ecg fabce gbdef fabceg beacdgf cg cagf | ceg fcegb gce dfbeg +dabcge gbdafe facbed fbacdge ecgfa dabeg bdgf fb bef fageb | bdeag bcdaef fbgd bdaeg +ac cfabe ecfbgd cbefg gbceda efcagdb edbfa bca cafg ecagfb | cgefdb cfgaebd ac edgcfba +cef abefcgd cabfe facgde cabgef agdecb fabdc fbge cgbae fe | agbec fcdabge gebf dfcega +agcbed aefgdbc ca gfabd dca abgcdf cbfa efbadg fcagd fcgde | ca cad gedfc dca +gadfcbe dc bcdag cdb dbcegf dbagce dabge gfdeab agcfb eacd | ecfgbd adce fgcdeab cead +cbafed bcefag ga aefbdcg abcef fgabcd aegc bedfg afg gaefb | gfa gdbfe acbef ecag +gdefa agedcfb gadbec fegbd gad da gdaefc cgabfe gfeca cdaf | dcgabef agd fcgea fcgea +fgcea fab cgfbae cefab ecbfd cgfdae dgefab gebdfac ba agcb | deacfbg beadgfc cgab cbga +dag dfebca gd bcdfa adbgc dfgeba cfgbad ebagc badcegf fgdc | gceab dag gd dag +gefbd aedgbf dgebcf ea aefd gea fbgae decgbaf gbafc agbcde | bgfed efad agbfe fbecgd +ebfc gfe ef ebgacfd cefdgb egcbd degfc dcabeg dfbgae dagfc | faegdb fge gefdc egf +dgefab fbeadgc gcadbe bdgcef bcgae edca cbdeg gae cgabf ae | age ae cdgbe cfdgeb +agdbf fe eabdc efd bfdaecg dbcage bfdae bdefcg cefa acbdef | fe ef efcgadb bedfacg +fcebga badecg adcef cfg cdebg cbdegf gfbd gefcd dfbaegc fg | edcbfg bfgd fceda fg +df dfgbca gfed feacb bdf bdfegc dagbcfe cgbeda bdecf ebdgc | acdbfg edfcb debcf debcf +dbc beac edfgb afdce facdbe debcf cb abdcfg gdecfa aedcbfg | eacb becdfa deafcbg cbd +gcdbfa afdceg abdfge befag gba efbgc ba cfeabgd dfaeg baed | feagb agb ba acdbgfe +gfdace ecdgafb fdegb ebdagc gb fcegd dgfbce bge debaf fcbg | bcdage egfbd gdebcf gb +bfa gface fb fabgdc dacfeb becgad bcead fbed dgbcfea eacbf | bedf beacgd gceaf caegbd +adgcb de edafgc egfba eda abecgf geabd abfged egbcadf bdef | ebfdcga ebdf ed dae +cgbed ebdgfc aebdcg bcdga efcbadg cfgab cfaged aedb da dag | bagcfed cdefgab cgdeba aegcbd +efabdg aedc cd fdcge cbdafg dcbeafg ecbgf fdgae dgcfea gdc | gdc dc aegdf dc +edgfca febgac egcfb efcgbd begcfda acg gdbea aegbc bcfa ac | bcaf fcegb bcaefdg bedfcga +ecfba bg cgdafbe cbfag cgbe aegfbc dafecb efbgad agb dgafc | bag fcbea aefcbg cegb +ebagdc fgaecd gcaefb dgceb ebfgd gcb dgfbeca bdac cb decag | cafebgd fcgdea adcbgfe cb +caedfb bdcegf dgac fad cbfdg gfabd gacdfb feabcdg da afgbe | deagcfb adf dfcgb aefgb +adgfbe ed eda dbaec bcagde egcd gacbe bfdac bagecf edfcbag | cedab bgfeda bdfac ed +abcgf cd edbag gbacd fcgd gfebca dfbgca adc bcgdafe facebd | dac fcdg gacdb dc +fagde badfe acdeg gbefacd gf bdgecf ecdgba fagc fecdga fdg | bfdgec dfg gf egcadbf +aedcfb cadeb agbecd cfda aefbg ecabgfd fbecdg bfaec fc efc | dcfa acfd dcaeb fagbe +ecbdga bacefg ea dcefb bcdae adeg dgbac fcgdba aeb cgafbde | dcbea ae cbefd aecdbg +df ecabgf fbde efgba fad dbfgca fdebga fegad cdgbfae acdge | daf agced egfba fcdbega +bfaecg gfdaebc dgec dcb baegc agdfb cd befdac bcdga cdgeba | decfab dcb cedg agdbc +gbadecf gbef gadec ebdcg bg dgb gcbfad dcfbea bfdecg fcbed | dbg dgb gb bfeg +bdfca cbdea dae ebgdfac cabedg efcbgd egdcb ae agce badfeg | dabcf dcabf dbecag cabedfg +edcafb ed aedgbc cedbf dgfbc dafe abefc deb cdfbeag bagfec | fdea ecabgd fcbgd ecfab +afbdce agc dcgf bcdag cedgfba dbgcfa bacfge gaedb bdfca cg | cbafd dcgf cg edbacf +eabfgc cfaeg cbfde adgbfc bface eagb acdbefg ab acb edacgf | ba cfdgab ab ab +egdfb dfbgaec dfaeg abgedf defcga egba feb dgbfc fabdec eb | efb eabg fbgcead aegdcfb +df fbdace gdebcf efabdcg dbf cagbfe efgd gbcda cgdfb cebfg | bgfecd aedfcgb dfbcae abcgd +ebgacf adcebf gcbaf df adbfcg bdcfega cfgbd dbf gecbd fadg | fcbga agbefdc fdb fadg +bagfe efcab cbf cbfgad abgfed faecbg begc cb daebfcg feadc | bcafe ecgb fcb cb +afdecg adbfeg cdgebf fecbgad eafc eacgd ec ceg cagbd afedg | gec ce ecfa fegdca +fgcade fbadeg abcedf ebcgf adcgfbe eca dafge ac cagd agecf | agdc cdgfae begfc geafcdb +cadbeg beagc ba afgbed cefdga bacd fecgb caedg gfebcda bag | gebacdf fcegb gdebaf ba +fbgad fcad egdab fdb cbedfg cbafedg gdcfab fd agbfc abcegf | df dfagecb gbefcd aebgcf +gbacfd ebacfd fcadb eagfbc ag adbgf cedfgab bag dfbge acgd | ga ag ag acbfgd +gebdfc fbedac efbag cdebf dg decg fbgadce egfdb dfcgba bdg | fegdb dfbec fbdacge dg +dbgfc fabcd fcegb bacdfe bgd eabdgc gd bdagfc fadg afdebgc | bcgdf dg dgb gd +aefcgdb faegcb fead edc aecbd bgcad de bfaec bdegfc afdbce | badfec cfgeab gbacef baecdf +fecdga cdgaf gba dbcafg dbfg cbfae agedcb dafgecb bgcaf bg | fdbg bgcfa dbagcf gefbdac +fea gfdbec abdf abefg edbgf bacge dcebgfa af egdabf cefadg | abfgdce dacfegb efa efa +bdgafc ebcgf bfea dgcbe abfcge egbcdaf efc gabcf ef cgdaef | fce fe fe fgbac +gadefbc dg egdcaf fdcbe caegb gcfedb dfbg gde edcbg fedbca | aebgc bfeacd cgdafbe gebdc +ec dcgfe aebgfd cagfbde fec dcgfa ebdc gebdf cbfdge ecbafg | egdbf cbegfa ebdc egcfba +dcbgf dcgeb cf dfc fgdbeac eacdfg gcdabf gafbd adfgbe bafc | cgdafb bfac dgeafc fdabg +aefbcd cadgf eacdg bgade facgbd eac ec dacegbf gfec acfged | gecf bedagfc geadc eac +egcab eagdfc egcdfb aegdf dec afcd cgead eadcfgb agdfbe cd | eafcdg cgdae aedgc dbfacge +ag bfdcge gca bgcef fgcae bagdfc egab bcdeafg afdce abcgfe | fdagcb ag egab faegc +abdfgec bgdca edcg abedgf bcd cd cgeadb fgcab dbgea dacefb | cbd dgbca gabdce dcfbaeg +eacbg gbe egacd dbecfg agedcb bg dgab edfacg cafeb fbgcaed | dgba dgab aecfb gb +fcgabe fecab fabedcg edbca bdgfce afeg efbcg dabfcg fab af | bgedfc afb baf ebgcafd +badcgf bef cgedbf fbagc ceafbdg begfa afgecb eabc egfad eb | abefcg fbgae gebafc gdcfeb +dafecg defbc fbgcae dbcg abfed gecfd ebc cgefbd cb dfagcbe | cb ceb bdcg bgcd +acgefb cae dgecbfa fcead abfdc gdcfe dbae bdcgaf ea dbface | cefdg cea eca cefdabg +fab egfda fb egbcda bgfc gafdb afdbgc dfebac gbadcef cdabg | dbcfag fb bgfad ecafdb +bgace badceg fdeacbg bedc gdebfa bge eb cdaeg dgefac fcgba | be fcabgde gdcafeb be +cg dcg gdabcfe dcgfae gcdea abgdef fgec abedc bgcafd gadef | gfdea cbead ecfg dcg +aecbfg edagc edc edcgfa gcbad gfcae gefd adecbgf bdafec de | cgaefd efcga cagef bgcaef +fedgc dafecg bcedfag agdbc dgbfec bge dbceg bcgfea be bdfe | cdgefab gdabc gbe eadgfc +eagf fcgbad edgabf cfegbd efb dbeaf decba fbgad bfedcag fe | dfbaeg ef ebf fbe +cebfag dbefgc cdgba dcgaeb dfbagce dg bgeca aged adcbf gdc | cbdegaf gefcab abcgd daeg +gafdb bdfea afbgcd fgd dgcfaeb gdbc facbg gd acdfeg efbcag | gdcb adfeb gcafb bagcef +fdaec adbcf acegfbd efbdag afcedg ea gbefdc geac cfdge ead | aegc dgcef fdcae gcae +afcbed dce fgadc gcea abfcgde dgefb ec bfagcd fadgce fcegd | efbdca bfdecag cde cefgd \ No newline at end of file diff --git a/day08/solution.spec.ts b/day08/solution.spec.ts new file mode 100644 index 0000000..c8a1fe3 --- /dev/null +++ b/day08/solution.spec.ts @@ -0,0 +1,213 @@ +import { loader } from '../lib/loader' + +type Note = [signal: string[], output: string[]] + +const parseInput = (line: string): Note => { + const [s, o] = line.split('|') + return [s.split(' ').map((s) => s.trim()), o.split(' ').map((o) => o.trim())] +} +const example = [ + 'be cfbegad cbdgef fgaecd cgeb fdcge agebfd fecdb fabcd edb | fdgacbe cefdb cefbgd gcbe', + 'edbfga begcd cbg gc gcadebf fbgde acbgfd abcde gfcbed gfec | fcgedb cgb dgebacf gc', + 'fgaebd cg bdaec gdafb agbcfd gdcbef bgcad gfac gcb cdgabef | cg cg fdcagb cbg', + 'fbegcd cbd adcefb dageb afcb bc aefdc ecdab fgdeca fcdbega | efabcd cedba gadfec cb', + 'aecbfdg fbg gf bafeg dbefa fcge gcbea fcaegb dgceab fcbdga | gecf egdcabf bgf bfgea', + 'fgeab ca afcebg bdacfeg cfaedg gcfdb baec bfadeg bafgc acf | gebdcfa ecba ca fadegcb', + 'dbcfg fgd bdegcaf fgec aegbdf ecdfab fbedc dacgb gdcebf gf | cefg dcbef fcge gbcadfe', + 'bdfegc cbegaf gecbf dfcage bdacg ed bedf ced adcbefg gebcd | ed bcgafe cdgba cbgef', + 'egadfb cdbfeg cegd fecab cgb gbdefca cg fgcdab egfdb bfceg | gbdfcae bgc cg cgb', + 'gcafb gcf dcaebfg ecagb gf abcdeg gaef cafbge fdbac fegbdc | fgae cfgab fg bagce', +].map(parseInput) + +const input = loader(8)('input').map(parseInput) + +/** + * 0: abcefg (6) 1*, 7*, Not: 2, 3, 4*, 5, 6, 8*, 9 + * 1: cf (2) Unique + * 2: acdeg (5) Not: 0, 1*, 3, 4*, 5, 6, 7*, 8*, 9 + * 3: acdfg (5) 1*, 7*, Not: 0, 1, 2, 4*, 5, 6, 8*, 9 + * 4: bcdf (4) Unique + * 5: abdfg (5) Not: 0, 1*, 2, 3, 4*, 6, 7*, 8*, 9 + * 6: abdefg (6) 5, Not: 0, 1*, 2, 3, 4*, 7*, 8*, 9 + * 7: acf (3) Unique + * 8: abcdefg (7) Unique + * 9: abcdfg (6) 1*, 3, 4*, 5, 7*, Not: 0, 2, 6, 8 + */ + +const isUnique = (s: string): boolean => + s.length === 2 || s.length === 4 || s.length === 3 || s.length === 7 +const countUnique = (output: string[]): number => + output.filter((s) => isUnique(s)).length + +const allUnique = (notes: Note[]): number => + notes + .map(([, output]) => output) + .map(countUnique) + .reduce((total, count) => total + count, 0) + +const uniquePatterns = [ + [1, 2], + [4, 4], + [7, 3], + [8, 7], +] + +const digitIncluded = ( + pattern: string, + digit: number, + configuration: Record, +) => + pattern.split('').filter((s) => configuration[digit].includes(s)).length === + configuration[digit].length + +const len = (len: number) => (p: string) => p.length === len + +const includesDigitsInConfig = + (configuration: Record) => + (digits: number[]) => + (pattern: string) => + digits.reduce((included, digit) => { + if (!included) return false + return digitIncluded(pattern, digit, configuration) + }, true) + +const notInDigitPattern = + (configuration: Record) => + (digit: number) => + (pattern: string) => + !digitIncluded(pattern, digit, configuration) + +const includesPattern = (pattern: string, inPattern: string) => + pattern.split('').filter((s) => inPattern.includes(s)).length === + pattern.length + +const includesDigitPatternInConfig = + (digitPattern: Record) => + (digit: number) => + (pattern: string) => + includesPattern(pattern, digitPattern[digit]) + +const wireConfiguration = ([pattern]: Note): Record => { + const digitPattern: Record = {} + const includesDigits = includesDigitsInConfig(digitPattern) + const not = notInDigitPattern(digitPattern) + const includesDigitPattern = includesDigitPatternInConfig(digitPattern) + + // unique patterns + for (const [digit, length] of uniquePatterns) { + const p = pattern.find(len(length)) + if (p !== undefined) { + digitPattern[digit] = p + } + } + // Nine + const nines = pattern + .filter(len(6)) // has 6 segments, + .filter(includesDigits([1, 4, 7])) // and includes segements for 1, 4, and 7 (which are all unique) + if (nines.length != 1) + throw new Error(`Unexpected number of candidates for 9`) + digitPattern[9] = nines[0] + + // Zero + const zeros = pattern + .filter(len(6)) // has 6 segments + .filter(not(9)) // but is not 9 + .filter(includesDigits([1, 7])) // and includes segements for 1, and 7 (which are all unique) + if (zeros.length != 1) + throw new Error(`Unexpected number of candidates for 0`) + digitPattern[0] = zeros[0] + + // Six + const sixes = pattern + .filter(len(6)) // has 6 segments + .filter(not(0)) // but is not 0 + .filter(not(9)) // but is not 9 + if (sixes.length != 1) + throw new Error(`Unexpected number of candidates for 6`) + digitPattern[6] = sixes[0] + + // Three + const threes = pattern + .filter(len(5)) // Has 5 segments + .filter(includesDigits([1, 7])) // includes 1 and 7 + if (threes.length != 1) + throw new Error(`Unexpected number of candidates for 3`) + digitPattern[3] = threes[0] + + // Five + const fives = pattern + .filter(len(5)) // has 5 segments + .filter(includesDigitPattern(6)) // The pattern of 5 must be included in the pattern for 6 + if (fives.length != 1) + throw new Error(`Unexpected number of candidates for 5`) + digitPattern[5] = fives[0] + + // Two + const twos = pattern + .filter(len(5)) // has 5 segments + .filter(not(3)) // is not 3 + .filter(not(5)) // is not 5 + if (twos.length != 1) throw new Error(`Unexpected number of candidates for 2`) + digitPattern[2] = twos[0] + + return Object.entries(digitPattern).reduce( + (wireConfig, [digit, pattern]) => ({ + ...wireConfig, + [pattern]: parseInt(digit, 10), + }), + {}, + ) +} + +const outputValue = (note: Note): number => { + const config = wireConfiguration(note) + return parseInt( + note[1] + .map((pattern) => { + return ( + Object.entries(config).find( + ([p]) => p.length === pattern.length && includesPattern(p, pattern), + )?.[1] ?? 0 + ) + }) + .join(''), + 10, + ) +} + +describe('Day 8: Seven Segment Search', () => { + describe('Part 1', () => { + it('should solve the example', () => { + expect(allUnique(example)).toEqual(26) + }) + it('should solve the puzzle', () => expect(allUnique(input)).toEqual(456)) + }) + describe('Part 2', () => { + it('should solve the example', () => { + const sample = parseInput( + 'acedgfb cdfbe gcdfa fbcad dab cefabd cdfgeb eafb cagedb ab | cdfeb fcadb cdfeb cdbaf', + ) + const config = wireConfiguration(sample) + expect(config).toEqual({ + acedgfb: 8, + cdfbe: 5, + gcdfa: 2, + fbcad: 3, + dab: 7, + cefabd: 9, + cdfgeb: 6, + eafb: 4, + cagedb: 0, + ab: 1, + }) + expect(outputValue(sample)).toEqual(5353) + expect(example.map(outputValue).reduce((sum, s) => sum + s, 0)).toEqual( + 61229, + ) + }) + it('should solve the puzzle', () => + expect(input.map(outputValue).reduce((sum, s) => sum + s, 0)).toEqual( + 1091609, + )) + }) +}) diff --git a/day08_test.ts b/day08_test.ts deleted file mode 100644 index f5dea2d..0000000 --- a/day08_test.ts +++ /dev/null @@ -1,121 +0,0 @@ -import { assertEquals } from "https://deno.land/std@0.208.0/assert/assert_equals.ts"; - -const example1 = [ - `RL`, - ``, - `AAA = (BBB, CCC)`, - `BBB = (DDD, EEE)`, - `CCC = (ZZZ, GGG)`, - `DDD = (DDD, DDD)`, - `EEE = (EEE, EEE)`, - `GGG = (GGG, GGG)`, - `ZZZ = (ZZZ, ZZZ)`, -]; - -const example2 = [ - `LLR`, - ``, - `AAA = (BBB, BBB)`, - `BBB = (AAA, ZZZ)`, - `ZZZ = (ZZZ, ZZZ)`, -]; - -Deno.test("Day 8: Haunted Wasteland", async (t) => { - await t.step("Part 1", async (t) => { - await t.step("Example", async (t) => { - await t.step( - "it should solve the first example", - () => assertEquals(navigate(example1), 2), - ); - await t.step( - "it should solve the second example", - () => assertEquals(navigate(example2), 6), - ); - }); - - await t.step("it should solve", async () => - assertEquals( - navigate((await Deno.readTextFile("./input/day08.txt")).split("\n")), - 12599, - )); - }); - - await t.step("Part 2", async (t) => { - await t.step("Example", async (t) => { - await t.step("it should solve the example", () => - assertEquals( - ghostNavigate([ - `LR`, - ``, - `11A = (11B, XXX)`, - `11B = (XXX, 11Z)`, - `11Z = (11B, XXX)`, - `22A = (22B, XXX)`, - `22B = (22C, 22C)`, - `22C = (22Z, 22Z)`, - `22Z = (22B, 22B)`, - `XXX = (XXX, XXX)`, - ]), - 6, - )); - }); - - await t.step("it should solve", async () => - assertEquals( - ghostNavigate( - (await Deno.readTextFile("./input/day08.txt")).split("\n"), - ), - 8245452805243, - )); - }); -}); - -/** - * Note: this looks like a synchronization problem which could be solved with LCM (there was a planetary rotation task in a previous year) - */ -const ghostNavigate = (map: string[]): number => { - const [instructions, network] = parseMap(map); - const startNodes = Object.keys(network).filter((k) => k.endsWith("A")); - const stepsFromStartNode: number[] = []; - for (const startNode of startNodes) { - let steps = 0; - let currentNode = startNode; - do { - const step = instructions[steps++ % instructions.length]; - currentNode = network[currentNode][step === "L" ? 0 : 1]; - } while (!currentNode.endsWith("Z")); - stepsFromStartNode.push(steps); - } - return lcmForList(stepsFromStartNode); -}; - -const navigate = (map: string[]): number => { - let steps = 0; - let currentNode = "AAA"; - const [instructions, network] = parseMap(map); - do { - const step = instructions[steps++ % instructions.length]; - currentNode = network[currentNode][step === "L" ? 0 : 1]; - } while (currentNode !== "ZZZ"); - return steps; -}; - -const parseMap = ( - map: string[], -): [string, Record] => [ - map[0], - map.slice(2).reduce((network, node) => { - const { nodeId, left, right } = - /^(?\w+) = \((?\w+), (?\w+)\)$/.exec(node)?.groups ?? - {}; - return { - ...network, - [nodeId]: [left, right], - }; - }, {}), -]; - -// Euclidean algorithm to calculate least common multiple: https://www.idomaths.com/hcflcm.php -const gcd = (a: number, b: number): number => (b == 0 ? a : gcd(b, a % b)); -const lcm = (a: number, b: number): number => (a / gcd(a, b)) * b; -const lcmForList = (ns: number[]) => ns.reduce(lcm, 1); diff --git a/day09/input.txt b/day09/input.txt new file mode 100644 index 0000000..9947a9b --- /dev/null +++ b/day09/input.txt @@ -0,0 +1,100 @@ +5678998989432198943298876799876586789998999434988989999876544345789987654545678931299765458679432456 +4556987678949987899097655679767345678987898949876579899987432134889987653237889542989654323488921347 +3245696569298765678976544598653234567896567899885467799876598245678998542126898769878943212367892356 +7656789689019654569895432987743125678923456998764345689987987656789987632015789998767932103456789969 +8767898789298965698789321296532012789912367897651234993398999867897898543234567897657899344868999898 +9898909899987976987679434987432123567893458976543349892109234978935987654945678956545888956779019787 +2999312999876899876548976798543256798954578987985498789290125989124698878876789545434677897892197656 +1098929989765678987537897899674345689765989299876989687989234998995789989989895432123456998999976545 +2987898763234567895426899999965457999879999101999878576978949876789891096593987643034587899698765434 +3496987654345979971015678989876598943989898999998765465767898765678992987432398854234567934569876745 +4985499795659898965434599575989699432396797878999874323456789654567989989321239954346789123456987659 +9875324989798787896545789434798789101234986767899983212345896543459878976310198765457991014569999868 +9766219878989656789659897321679893212379875456798432101236998532598767895421239876678962195998941979 +9854398768878968998767896432567954523459864323987543212456897431999656789532345987789653979896532989 +8765498656867978979898998543459995745569876434598798654567896569898545678945478998999969867789549899 +9876986545457899656979999876598989856978987945679898767878987798767634599999567899019898656678998789 +9989978432345898789767899987987679997899199896789979878989498987656424989987678999198776547578999678 +8998764321256789995456789999976567989921099798996568989595349998843213577898789878998652123469996578 +7987653210127897654365898998765465678932989699765439995430157898632102356999896569986541012345987989 +6398865432238976543234567899901234567899876587996549899321298976543214467899954398997632123657898994 +5219976554349899432129698999893345678998765346789659798932349998654323578999876497989543234567899543 +4323987665656798921098989998789556989987654223878998687893499969875987679987988986578994547678978932 +9495999877897987892987878987678967898998743012567896546979987855987898789876599965489789659789459891 +8989892998999876789976567897567998957989432123456985434569756234598939898765498744345699967891298789 +7678793459998965678975456976456789549876543254569876324598542123459329999654399534234898898999987678 +6547689567987854769894345994347695434987656767878987765987643044678998998765987620123456789998976567 +2134578979876543456789234789234589323698787878989998987896543235799987989976798731245977898987894348 +1023456798989874767890125696345678934569898999598999199987654376789876476799987654356898987656791239 +2434587997898765889931459895456989545679999545457889298998775479898784345678998767487929876545789545 +3679679876779976789432345796587997656798789432345678987989986567987673234789769876598934987656899696 +4598798785669899996543456998798998787989699421234567896767897678976543125898654987679875898967998989 +5689987674357698999876567899899899899876568994365898965658998789985432016789543298789876789878987977 +6898998543234567899997878965956789921965434589456789984347899899876543123895432109897989898989995456 +7987899932123456789398989954345997899875325678987896543256789976987754544789549212976799997699984378 +8996998761014767891239997896456896898765456789198987632149899965599865765678998999765678986569876467 +9965987654145678910949876789587965789876567991019996543234999843479876878989576788974599875454987678 +7894398743234599999898765678998954678987878992398897755345898764567987989995435567893987654323499789 +6989219894346789987769989789989563867999989989987789976456789879679998999876323467932198763212599890 +5678923998456799976545699899876432345693299979876667896597999998998999998987212348942019874343989921 +4567894986568897895434567921987321276789129864985456997678999987897999987658301239953198765454678934 +3656789997679936789323989210995490987899298743234357898789878546786789876543212367893239887565789995 +2345678998789325679999898929876989898998987654101256789898765435545678987665325456789357997676799989 +3476789019995434569878787899989978789997987643214347999999854321236789898775434567895467898789989878 +4567892129876765698765676789998767679876987654765656789998763210145698769887655698986578969899878767 +5688943436987986997654565678987654598765498769876777899989954321234789656998767899987699656998766456 +7899894545698999876543234567896543987654329989987888989679895452345678946989878957899988997987654345 +9956789656789123987632123479987659876543213597898999876565789667458789239878989745987567689998765456 +2345678967894234696541014578898767998632101456789767987434578978569890198767897659986456578909876567 +3456789878954356986532123456789878996543212347890345898323467999998932987656789798765343469219989878 +4567896989996969897543234587990989987654323456921256789212356989897949876545678999973212458998596989 +8689965699989898798656945678991399898785434567892345892101249876786899865434567899865393567967445698 +8792123989876767679987898789789989789897545679953556789234598765645697654323798999976989998953234567 +9893439876565654567898989897678976567998976789767787896545987543234789763212346789899877899762146788 +1999598765434123456999878978567985445879987899879898987657998652101679654101235898765766794321017899 +2398987654321014567894569865379876234567898999989999698769876543213568969233346789654545689987634799 +9987898998432123798923498765456989445789999998993987569899989984623479598944567896543234568976545678 +8765659996543235689212349878579876556895698987894595456989999876534689457899698965432124589987678989 +5434347987656345678901656987689987667894987656889696579878989987678994345678969999943012679799889998 +6521236798965456789892997899893198789989876645678989698769878998789101234589456987899323569654999987 +7632345899878569898799789910999099895469985434569878997645568999893214456678967965678954578967998976 +6543656901989689987687678921398987994398996945698969876431467989965323467889899876789995678979876765 +7654567899798799976546469892987856789987889896987654986542349878976545578996791987899989789998765434 +8765678978669899865435346789896543899765678789998743297656598967897767899545932398999878999987654321 +9889889765554987654321234599787012987654885678987654198787987656899898989959893999989656798999766432 +6998999984323498765634345987652123498753234569988621019899876547999979569899789899877545987899997949 +5656789993212549876765678999543934995432123458976542323999987656898763456798656789765434876789989898 +3245678995301234987876789987659899876541012367897643434589998867897652367987545679654321345899876767 +5346889876418345698997895698998767987632123456789656565678939978998743489876434599865632346989765656 +6757895987567896789298994349898657898743246577898969996799320989987654578987645689976543559876534345 +7878934599678987892129789656798745569854768688957898789978999999898965789998786792987654667987621234 +8989321698789998943345678969959433498769879799346789698767688998789896999979897891099788789599732345 +9399934789899999874456989298743212349899989890123699545654567987678797899765998999988999995498543456 +1239895698999889965569890129654101257999897921234568932343879876587689999854349998877989654397654767 +3398789987898779897698789298765233398998765434345678921012998765434567899873234987765678965298765878 +5497679876789657789987678999874345479999876845456989532323459764323456789984749896584567994349896989 +9986545985698745678998545899985456567899987656567896543456798765436578999875698785323456789956997891 +8765439876789434567899676789876567898989998787898987654578899877748789854976987654212345679897989930 +9854323987896567678998787898998678959678999898999498767999901987659899765987998765401256798769878921 +9965214598987679789799898997679789344569989969894329898999892398767978979998999878919347987656767932 +9876329699998799897689999999569896103498767456789212959998789999898956798939389989898959876545658993 +3987898989899899954599987878979975212997656345892101345894569889999345987821278998767898765434545689 +2198987676799989323989765468998764329876543234789292456793298767893239876710367987656797654323434578 +3999997545989878939878954359899765478987832145678989667894987656789123985321459977645498967410123467 +9889998659878967899867895456789876569998953256899679998965976545993239876432598766532359978823234589 +9775879769767456798756789767898987878999866367996567899876987636789998987543679854321267898764345699 +8654569898659345986545678978987898989398765456789456999987898747898767987654678965432878929875456789 +8743453986545239875434567899876789999219876567894347898998999898989654599865679876543989434986578999 +9432012987432129854323456789765898998723987678989256987899298969678913479876789987767998745797989378 +6543123497654098765212345678954767896545698989879129876789197654599904567989894398979997656998990165 +8656934598843259876323467989653457997959789698768998695778986543489895989199965219497998797899989234 +9879899789654348985434578999942346789898994599545986434569999642376789891019876101356989989987678946 +9998778998765467897665689678799457898767895987439876545678998921235679792198989212349879978998567897 +9897669899989878998786789545678968998656789876545989656789987892346895679987654323498768967899456789 +8789456789999989659887895434567899876545457987676798767899876789457893568999876654599545656789577897 +7678345678999896543998976125678923965432346798787899879954965878967932477899987765987434346899789956 +8543234567898765432159876546789019876553456899898965989965954767898921276789998879876521235678993234 +8732145678969876643345987657893247987864579965999754296899843459899632345899879989987432346789210123 +9543234689654987754456799768985356798977678954987653124989752576789543656946965399876545457894321234 +7687657995323499767569894978976467899398789432098764349876641345689654568939873212999856567965432345 +8798767897435679898989943989989878910239896545139975668965432456799767899123982101298767878978644567 \ No newline at end of file diff --git a/day09/solution.spec.ts b/day09/solution.spec.ts new file mode 100644 index 0000000..9368fd4 --- /dev/null +++ b/day09/solution.spec.ts @@ -0,0 +1,152 @@ +import { loader } from '../lib/loader' + +const toHeatMap = (map: string[]): number[][] => + map.map((s) => s.split('').map((s) => parseInt(s, 10))) + +const example = toHeatMap([ + '2199943210', + '3987894921', + '9856789892', + '8767896789', + '9899965678', +]) + +const input = toHeatMap(loader(9)('input')) + +type Point = { + level: number + x: number + y: number +} + +export const findLowPoints = (heightmap: number[][]): Point[] => { + const lowPoints: Point[] = [] + + for (let y = 0; y < heightmap.length; y++) { + for (let x = 0; x < heightmap[y].length; x++) { + const point = heightmap[y][x] + const up = heightmap[y - 1]?.[x] ?? Number.MAX_SAFE_INTEGER + const down = heightmap[y + 1]?.[x] ?? Number.MAX_SAFE_INTEGER + const left = heightmap[y][x - 1] ?? Number.MAX_SAFE_INTEGER + const right = heightmap[y][x + 1] ?? Number.MAX_SAFE_INTEGER + if (right <= point) continue + if (left <= point) continue + if (up <= point) continue + if (down <= point) continue + lowPoints.push({ + x, + y, + level: point, + }) + } + } + return lowPoints +} + +export const flood = ( + heightmap: number[][], + lowPoint: Point, + basin = [lowPoint], + endLevel = 9, +): Point[] => { + const { x, y } = lowPoint + const up: Point = { x, y: y - 1, level: heightmap[y - 1]?.[x] ?? endLevel } + const down: Point = { x, y: y + 1, level: heightmap[y + 1]?.[x] ?? endLevel } + const left: Point = { x: x - 1, y, level: heightmap[y][x - 1] ?? endLevel } + const right: Point = { x: x + 1, y, level: heightmap[y][x + 1] ?? endLevel } + + if (up.level < endLevel) { + if (basin.find(({ x, y }) => x === up.x && y === up.y) === undefined) { + basin.push(...flood(heightmap, up, [...basin, up], endLevel)) + } + } + if (down.level < endLevel) { + if (basin.find(({ x, y }) => x === down.x && y === down.y) === undefined) { + basin.push(...flood(heightmap, down, [...basin, down], endLevel)) + } + } + if (left.level < endLevel) { + if (basin.find(({ x, y }) => x === left.x && y === left.y) === undefined) { + basin.push(...flood(heightmap, left, [...basin, left], endLevel)) + } + } + if (right.level < endLevel) { + if ( + basin.find(({ x, y }) => x === right.x && y === right.y) === undefined + ) { + basin.push(...flood(heightmap, right, [...basin, right], endLevel)) + } + } + // Remove duplicates (FIXME!) + const uniquePoints: Point[] = [] + const basinMap = basin.reduce((basinMap, { x, y, level }) => { + if (basinMap[y] === undefined) basinMap[y] = [] + basinMap[y][x] = level + return basinMap + }, [] as number[][]) + for (let y = 0; y < basinMap.length; y++) { + for (let x = 0; x < basinMap[y]?.length ?? 0; x++) { + const level = basinMap[y][x] + if (level !== undefined) + uniquePoints.push({ + x, + y, + level, + }) + } + } + return uniquePoints +} + +export const findBasins = (heightmap: number[][]): Point[][] => { + const lowPoints = findLowPoints(heightmap) + return lowPoints.map((lowPoint) => flood(heightmap, lowPoint)) +} + +export const riskLevel = (heightmap: number[][]): number => { + const lowPoints = findLowPoints(heightmap) + return lowPoints.reduce((sum, { level }) => sum + level + 1, 0) +} + +describe('findLowPoints()', () => { + it.each([ + [['000', '000', '000'], []], + [ + ['111', '101', '111'], + [ + { + x: 1, + y: 1, + level: 0, + }, + ], + ], + ])('should find low points in %j to be %j', (map, expected) => + expect(findLowPoints(toHeatMap(map))).toEqual(expected), + ) +}) + +describe('Day 9: Smoke Basin', () => { + describe('Part 1', () => { + it('should solve the example', () => expect(riskLevel(example)).toEqual(15)) + it('should solve the puzzle', () => expect(riskLevel(input)).toEqual(498)) + }) + describe('Part 2', () => { + it('should solve the example', () => { + const basins = findBasins(example) + expect(basins).toHaveLength(4) + basins.sort((b1, b2) => b2.length - b1.length) + expect(basins[0]).toHaveLength(14) + expect(basins[1]).toHaveLength(9) + expect(basins[2]).toHaveLength(9) + expect(basins[3]).toHaveLength(3) + }) + it('should solve the puzzle', () => { + const basins = findBasins(input) + basins.sort((b1, b2) => b2.length - b1.length) + expect(basins[0]).toHaveLength(105) + expect(basins[1]).toHaveLength(102) + expect(basins[2]).toHaveLength(100) + }) + }) +}) diff --git a/day09_test.ts b/day09_test.ts deleted file mode 100644 index 18e27ac..0000000 --- a/day09_test.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { assertEquals } from "https://deno.land/std@0.208.0/assert/assert_equals.ts"; -import { sum } from "./util/sum.ts"; -import { toNumber } from "./util/toNumber.ts"; - -const example = [`0 3 6 9 12 15`, `1 3 6 10 15 21`, `10 13 16 21 30 45`]; - -Deno.test("Day 9: Mirage Maintenance", async (t) => { - await t.step("Part 1", async (t) => { - await t.step("Example", async (t) => { - await t.step( - "it should solve the example", - () => assertEquals(sum(example.map(predict)), 114), - ); - }); - await t.step("it should solve", async () => - assertEquals( - sum( - (await Deno.readTextFile("./input/day09.txt")) - .split("\n") - .map(predict), - ), - 1901217887, - )); - }); - - await t.step("Part 2", async (t) => { - await t.step("Example", async (t) => { - await t.step( - "it should solve the example", - () => assertEquals(sum(example.map(predictHistory)), 2), - ); - }); - await t.step("it should solve", async () => - assertEquals( - sum( - (await Deno.readTextFile("./input/day09.txt")) - .split("\n") - .map(predictHistory), - ), - 905, - )); - }); -}); - -const predictHistory = (report: string): number => { - // Calculate the sequences until all are 0 - const sequences = toSequences(report); - // Predict by filling up from the bottom - sequences[sequences.length - 1].push(0); // Add 0 to bottom - for (let i = sequences.length - 2; i >= 0; i--) { - const sequence = sequences[i]; - const first = sequence[0]; - const below = sequences[i + 1][0]; - sequences[i].unshift(first - below); - } - return sequences[0][0] as number; -}; - -const predict = (report: string): number => { - // Calculate the sequences until all are 0 - const sequences = toSequences(report); - // Predict by filling up from the bottom - sequences[sequences.length - 1].push(0); // Add 0 to bottom - for (let i = sequences.length - 2; i >= 0; i--) { - const sequence = sequences[i]; - const left = sequence[sequence.length - 1]; - const below = sequences[i + 1][sequences[i + 1].length - 1]; - sequences[i].push(left + below); - } - return sequences[0].pop() as number; -}; - -const allZero = (readings: Array): boolean => { - const s = new Set(readings); - return s.size === 1 && s.has(0); -}; - -const diff = (readings: Array): Array => - readings.slice(1).map((r, i) => r - readings[i]); - -const toSequences = (report: string): number[][] => { - const sequences: Array> = [report.split(" ").map(toNumber)]; - do { - sequences.push(diff(sequences[sequences.length - 1])); - } while (!allZero(sequences[sequences.length - 1])); - return sequences; -}; diff --git a/day10/completeProgram.spec.ts b/day10/completeProgram.spec.ts new file mode 100644 index 0000000..9377270 --- /dev/null +++ b/day10/completeProgram.spec.ts @@ -0,0 +1,14 @@ +import { completeProgram } from './completeProgram' + +describe('completeProgram()', () => { + it.each([ + ['(', ')'], + ['[({(<(())[]>[[{[]{<()<>>', '}}]])})]'], + ['[(()[<>])]({[<{<<[]>>(', ')}>]})'], + ['(((({<>}<{<{<>}{[]{[]{}', '}}>}>))))'], + ['{<[[]]>}<{[{[{[]{()[[[]', ']]}}]}]}>'], + ['<{([{{}}[<[[[<>{}]]]>[]]', '])}>'], + ])('should complete program %s with %s', (program, completion) => + expect(completeProgram(program)).toEqual(completion.split('')), + ) +}) diff --git a/day10/completeProgram.ts b/day10/completeProgram.ts new file mode 100644 index 0000000..7871a04 --- /dev/null +++ b/day10/completeProgram.ts @@ -0,0 +1,14 @@ +import { parseProgram } from './parseProgram' + +const matchingBrace: Record = { + '(': ')', + '[': ']', + '{': '}', + '<': '>', +} + +export const completeProgram = (program: string): string[] => { + const stack = parseProgram(program) + if (stack.length === 0) return [] + return stack.reverse().map((openingBrace) => matchingBrace[openingBrace]) +} diff --git a/day10/input.txt b/day10/input.txt new file mode 100644 index 0000000..e2c0770 --- /dev/null +++ b/day10/input.txt @@ -0,0 +1,106 @@ +[<([((<(<<{{{[{}[]][<>{}]}[{[]()}{[]<>}]}<({(){}}<()<>>](<{}<>><[]<>>)>}<<[<<><>>[()<>]]{({}<>) +<([{<<{[{{{[[{{}[]}(<>[])]{[[]<>]>]<[[<><>]([]<>)]{<{}<>>{{}<>}}>}[<((<>())[[]{}])>[<{[][]}<{ +[{{[{([[[[{[{((){})(()<>)}{([]())}][(({}{})[[]()]){(<>{})<()<>>}]}][[{<{[]{}}[{}()]>[[{}<>](<>{})]}[ +[{[<[(([{[<(<{{}{}}([]<>)>)>([[[[]{}]<(){}>](<{}[]>[[]{}])]({<{}{}>}<{[]()}([][])>))]}{{[[[<[]{}>([]())]{{ +{(<[<{(<[(({([{}[]]({}{}))<{()[]}([][])>})([[<{}[]>([])][<[]{}><<><>>]][[<<>[]><(){}>](({}{}){<>()})])) +<{(<[[([[[{<[({}[])<()()>]>}[[{<<>()><{}()>}[<<>{}><[]<>>]]]][(<({[]}([][]))><(<{}{}>){({}())[[]{}]}>){[[ +(<(<(((<<{[<[{[]{}}({}{}>]><[<()<>><{}{}>][{()<>}({}())]>]}({<[[[]()]{[]<>}](<[]<>>([]<>))>[{(<><>)([][])}] +<{[[{({<([[<{(<>())[<>[]]}><({[]{}}<<>>)[((){})[[]()]]>]]({<<(<><>)[{}<>]>{[{}{}](()[])}>([([]<>){() +(((<{{{{<<[<([[]<>])({()<>}[{}<>])>(<{<>()}>{[{}<>]})]><[[([[]{}]{{}()})(([]){(){}})]{[{<>{}}<<>{}> +[{((({[[([[[{{[]<>}(<>[])}[([]{})([][])}]<[(<><>){[][]}]{<{}{}>(()())}>]]<([<{{}()}{{}<>}>[( +{(<{[[{(<[[{{[(){}](()[])}}<[(<>{}){[][]}]{<<><>>{{}()}}>][{{{()}<()()>}{<<>()>(()[])}}]]>[{<({[<> +(([([([(([<([([][])<()()>]<({}()]({}())>)>{[{<[][]>(<>{})}<{{}{}}(<>{})>]<{([]())(<>{})}[{<>{}}[()()]] +{<<<{[({(<({(<{}()>){[<>()](()<>)}})<[<{()[]}{<><>}>]{[[(){}]({}<>)][<<>{}><{}<>>]}>><(([<{}[]>(<> +{[[([[([{[(<<(<>[]){{}}><([]<>)<()<>>>><([(){}](<>{}))[{[]}<{}<>>]>)][{{(({}())[[]{}])}{([()<>][[]<>]){<[][]> +{([{(({<<{<{{(<>())[{}{}]}{(()[])[[]<>]}}>}>[<{(<[[]()]<{}()>>)<{((){}]((){})}[[{}]([]{})]>}([({ +(([(<({[<({{<{<>[]}<<>{}>](([]()))}<(<{}()>(<>))<((){})[<>{}]>>})({[[<()<>>][<()<>>[<><>]]](({ +<<((<<{[{(<<<{{}{}}[{}<>])(<<>()>[[][]])>>([({()[]}[<>{}]){[{}<>]{()<>}}]{(<{}{}>[<>[]])[{<>[]}<[]{ +([{(<<{{<{<<<<()<>>([][])>(([]()){()})><{[{}()]{<>{}}}<{()<>}<()[]]>>>}{<<<{()}((){})>[[{}()][<>]]>>[ +<[(<<<([{{{((<()>(<>{}))<([]<>)(<>())>){([(){}]<()()>)}}{{[[()[]](()<>)]{(<>()){()()}}}<[({}()){[]<>}][<{}[ +(<{{({({({[{([()<>])[{<>{}}]}{<([]())[[]<>]>([()()]{[]<>})}]{(<[{}()]<<>()>>[<<>())<()[]>])[({()()}[[] +<({<({[{(({{{<{}()>[(){}]}{({}<>)<[]{}>}}<<<{}[]>([]<>)>[(()())[()<>]]>}<(<[[]{}]([]())>([(){}]<[][] +{(((<(<{{{<[[{[][]}]<{[]{})[{}()]>]<[<{}<>>][[[]()](()<>)]>>}([([{{}[]}[<>[]]][(<>{}){[]()}])({[{}[]][<> +{{({(<{{(([<(<()<>>{(){}})>[<{()()}[<>{}]>[<<>{}>{[][]}]]]({{<<><>><[][]>}[[<>()]<[]()>>}<<(()())[[]<>]><{< +<{(<([{[{<[[[(<>)({}{})]]((<()<>>))]{{{(()<>)([])}}[{{{}()}{<>[]}}[{[]{}}{<><>}]]}>}][<[<[<[(){}]><({}[])<<>{ +<({[[<<([(<{[<[]<>>[{}<>]](({}[]))}{{[{}<>]}([[]{}]([]{}))}>[[{<[]<>)<{}>}{{(){}}{()}}]([(<>{})]<<[]()> +{(([{<{(((<<<(()[])([]())>[<<>{}>({}[]]]>>[[([[]<>]<{}[]>)<[<>[]]{(){}}>][((<>[])(()[]))]]))(([{<{<>}{{}<> +<[((([<{{([{({<>{}}(<><>)){([]{})<()[]>}}({[[][]]([]{})}({[]<>}))][<<[<>{}]([][])>(<{}<>>[( +<[{{[{{<{[[([<<><>>]{({}())([]<>)})]]}[<({([{}{}]{[]})({()()}[(){}])}[{<(){}><{}[]>}])<[[<[]{}> +(<(<{<{<{([([<<><>>]({[]}[()[]])){<{<>()}<()[]>>[([]{}){{}[]}]}]{{({[]()}{<><>})([{}()](()()))}<[<[][]>][<[] +{[{{<[(<(<{<{{<><>}{{}{}}}([()()])>[<<{}>[()()]>[[()()]{[][]}]]}>)[<<<<<[]()><(){}>>[[<>()]<{}{}>]>[{{ +([{(<({((([<(<()()><[]()>)({{}()}{<>()})>{[({}[]){{}[]}]{{{}()}{{}<>}}}])(<[{((){}){[][]}}([[]()])]{<{()<> +((<<[{<[(([({(()<>)[{}{}]}{<{}[]><[]<>>})<[<()>]([()<>])>]{((<[]{}><()<>>)<{{}><<>>>)[(<{}()>)<[[]()]( +({<([[<{[{[[{{{}<>}({}())}<[<>()][{}[]]]][[{[]<>}]<([]{})[{}()]>]]}]([{[(<[]{}>[{}[]])]}]{((<[{} +<[(<{<[<<({<<{<><>}(()())>)}{(({(){}}){[{}[]]{{}{}}})})>>]>}<[<{(<<[(<()<>>[[]()]){{{}<>}<[][]>}][(<( +({([(<{[{[{<({<>{}}<()[]>)>{[(<><>){{}<>}]}}]}]}[([[{[[[[]{}]][([][]){<>{}}]][[{[][]}(<>[])] +[<([<[([[{{({{<>{}}[{}[]]}([()()]({})))((<(){}>)([[]())({}<>)))}}]])]>{<<(({{<[<{}[]>[()<>]]>}}([[{({}<>) +<{[{<[<([{(<{<<>{}><<>()>}[(<>[])[<><>]]>[(((){}))<(<>){{}[]}>]){(<({}{})[{}{}]}<<[]{}><{}<>>> +{[[{<{[<<<(<<(<><>)<[][]>>{[<>{}]{()<>}}>{{{[]<>}<<>()>}}){(<{<>()}(()<>)>{{{}[]}(()())})]>>({(([<{}()>([]{ +[<({(({<<{<<{<<>>{<><>}}((<>{})({}()))>([({}())([][])][{{}{}}<[]<>>])>}((<<<(){}>{{}()}>[{<>()}({}{ +<([[[{[(({([{<()<>>}]{(([]<>)[()<>])}){<[{()()}[<><>]]([<><>][{}[]])>{({{}{}}){<{}[]><<><>>}}}}{<({<()<> +<[<((<[[<({{[{<><>}{{}{}}]{<{}{}><(){}>}}{{[[]{}][<>[]]}([<><>][{}()])}}({{{<>()}<<>{}>}([{}]{ +{[(<({[{<<{<{{()[]}({}())}{{{}()}<()>}>[<([]{})<<>{}>><{{}()}{{}{}}>]}<{({[][]}{{}[]})}<<{<>{}}[[][]]>>>> +<{[<([(<<([[(<[]<>><{}()>)<({}<>){(){}}>]]<<[(<>{}){{}<>}]([[]{}]({}{}))>>)>{[{[<<[]><{}<>>>(({}{})) +{(<<{{{((<<[({[][]})[([]())(<>{})]][((()<>)([][]))}><([[()[]]]){<<[][]>><<{}[]>[(){}]>}>>[([{[[]< +<{(<<<{{((<{{<{}()>[<>()]}({<>{}}[(){}])}[{({}<>)(()[])}<{(){}}<{}{}>>]>{{[[[]{}]<[][]>]{[{}{}][[]<>]} +{(<(<([{<([<{{<>}<<>{}>}{<()[]>[[]()]}>{<[()()]({}{})>((<>{}))}][{<{[]}[[]()]>{{<>}[[]<>]}}({<<>{}>[[][]]}{< +{((<[<<[{<{[{{{}<>}}<[<>()]([]())>]([<()()><()()>]{[()<>]{[]()}})}<{([[]()]{<>})}(<<[]{}}{[][ +[{{{<<<[{[(<[{[]{}}{(){}}}(<()>[[][]])>{{(<><>)<<>()>}<<<>{}>(())>})]{<(<<[]()>({}())><[{}<>]{[]()}>)>< +{{[[[({((({{({{}()}<()()>)}{(<{}{}>{()<>})[(()<>)<<><>>]}}<[<[{}[]][()<>]>[[(){}][()()]]>{<{<>[]}[ +[<[([{[{[{[{({(){}})}[[<[]{}>{<>()}]]]<[<{<>()}[<><>]>[{<>[]}<()()>]][<{[]{}}({}())>{<[]()>{{}()}}]> +<([{({<(({<{<[[]{}]({}[])>[[<>[]]<<>[]>]}>}{(({(()[])[[]()]})<[[{}<>][<>{}]]<[[]()]([])>>)}))[([[([([][])[< +{<{[([(({<(<{{<>[]}[[]<>]}<(<><>)[[]{}]>>{{{{}()}((){})}))<[{[{}{}]([]{})}{([]())(<>{})}][<(()[]) +([[[([<[[{{((<{}{}>(<>()))[({}[]){<>{}}])}}[[(({{}{}}(()[]))<[<>{}]<()<>>>)]<({<()<>>}{{{}<>}{( +(<([{[{<[{[<<<{}()}{{}<>}>({(){}}<[][]>)><{<<>[]>((){})}>](<([()()])[([])({}{})]>[[<{}[]>(<> +([(<{<([{{[[[({}{})[(){}]]]([(()<>)[<>[]]][<{}{}>])][<[<<>[]>[(){}]][[{}[]](<>[])]>({{{}[]>([]{})}[{[][]}[{} +{<[(<[({[<({[({}[])]<{{}<>}[{}()]>}<{{{}{}}[[]]}<(()())[[]<>]>>)>{[{[(<>{})[<>{}]]<({}<>)((){}) +{[{[<<<[([[[<{[]{}}[<>()]>(([][])({}[]))]<[[<>()]{<>()}]<[()[]]{[]()}>>]](<{<[()[]]>{({}{})}}(<<[]<>><[]<>> +({[<{{<<({<(<[{}{}]>)[(<{}{}>[[]{}]){<{}()>{<>[]}}]>(({<<><>><<><>>}({[][]}))[[{{}}([]{})]])}[({(<{}[]>{()<>} +({{{{{{[<[<([([]){{}[]}][([]{})])(<([]{})(<>{})><[<>](()())>)>{(([[]()](()())))}]{[[({()[]}{<>( +(({{[<[[[((<{(()<>)[[]{}]}([[]()]{<><>})>))((<{{(){}}(<>())}(<<><>><[]{}>)>(({()()}[{}[]])))<([<<>><()[]>])< +<[[{<({[((<<({{}()}{<><>})<<()[]>[{}()]>>><(<[[][]][()]><[()[]]>)>>){{<((({}<>)(()))(<{}()>) +{<{[([{<{<([{[<>{}][{}{}]}[([]())[[]<>]]]{([<><>]<<>{}})}){[(([][]){<><>}){<<>{}>[()[]]}]<(<()()>{{}})<([] +<{<{<([[[[{[({[][]}<[]{}>){[<>{}]{[]}}]}([[(<>[])][(<><>)<<>{}>]]<([()<>][()()])[<[]()><<> +(<((({{{<([{<[()()]{[]()}>[{{}{}}[()[]]]}]{[(<()<>><[]{}>)<<{}()>[<>[]]}]([[()()]]{(()<>)})}){<{{({}())( +[[[[(([{[(((((<>()){{}{}})(<[]()>({}<>)))<<<()>([]>>((()<>)[<><>])>)([[<()[]><{}()>]{{[][]}([]< +[[{([(<((<[[(([]<>)({}[]))<(())>]]>))>(<([[<{((){})<<>{}>}>{{<()()>[<>[]]}([[]{}]{[][]})}]])[<[< +((([[(<(<[<((<{}()>({}[]))<<<>[]>[()[]]>)([((){})({}())])>][<[(<()()>{{}{}}){<{}<>>{()[]}}]>{[{{{}( +{<(([((<[({<<{<>[]}[[]()]>>([<{}{}]({}())]([()()]<{}<>>))}({[<()()>{[]{}}]((()<>)<()()>)}))([<[[<><> +<[{[<{({([{([({}<>)({}{}>])<([{}{}][()[]])<([]())>>}[{<(<>{})((){})><[<><>](()[])>}<<{<>{}}([])><({}( +({{<<<(([<{<<([]<>)[<>]][{[]{}}{(){}}]>{(({}{}){()<>})}}[({<{}()><(){}>}{([]{})[<>[]]})<[{<> +(<<(<[({[<({<<()<>>({}<>)>})<({<()()><{}{}>}[{(){}}[<><>]]){(({}())<{}<>>)<<(){}>({}<>)>}>>((((<< +[{{{({[{([<<<(<><>)<{}<>>>{{[]()}[()[]]}>{[<<>{}><<>[]>]{[[]{}][()<>]}}>{<<[()<>]><([]{}){<><>}>>[{{{}()}{()[ +[[{{(<[[{<<[<[{}{}][{}{}]>>({[(){}]<{}{}>}(((){})[<>[]]))>>}((({<(()<>){{}{}}>{<()[]>[{}[]]}} +(((<{{<{[<<[{{[][]}{[][]}}]{[{[]<>}{()}]}>{{[[[]<>]<(){}>]<[[]()][[]()]>}[<<[]<>>(<>}>{(()<>)<()()>}]}>[ +([[{[({{{{[(<<()<>>(<>[])>[(()())<[]{}>])]<{{(<><>)(()<>)}([<><>]<(){}>>}>}[<{({(){}}<()<>>){(<>< +{({<{[(<{(({<[[]{}](()())>(((){}))})<(<{<>()}<{}>>{<()()>([]{})})([[<>[]]{[]()}][{<>[]}[{}[]]])>)<{<(<{}()> +{(({[{<{<({{(<[]{}><{}()>)[{{}<>}]}})(<{([()()]{()<>})<{<>()}<[]()>>}<([()[]]([]{}))<{{}{}}<<>[])>>>{({[[]{ +<<{{([([[[{<{[<>()]]>{<[[]{}]((){})>{{<>{}}<{}<>>}}}{{{<<>{}>({}<>)}[<(){}><{}()>]}([<{}<>>(<>[]) +[{<[<{{{{<({{<{}()>{{}<>}}})[(<{<>[]}{<>()}>[(<>())<()>])<<{()[]}<<>()>>{([]<>>}>]><({[[{}[]] +[{{<(<({(<{[<[<>[]]{()<>}><(<>[]){{}}>]{<<<>{}>[<>{}]><[[]<>]{<>()})}}>)}[[({{<[()()][(){}]>((()[])( +[[[[[[[[<<([<[()[]](<><>)><(<>[])<<>{}>>])><{[<<<>{}><{}()>>({[][]}<[]{}>)]([{<>()}{{}[]}]{{{}{}}{[]()}} +<(((<(([<{(<[[[][]]{()[]}]<(<>{}){[]{}}>>)}>]))[({[<<{(<()[]>([]<>))[<()[]>{()[]}]}<([<><>](<>[]))((<>() +<{{{<{{{[[{([({}{})<[][]>]<[<>{}]{<>()}>)}<({{[]<>}([]())}<<<>[]><<>{}>>){(<[]><(){}>)>>]{{(<([]<>)([]( +<[<{[<{{([(({(<>())}{[<>[]](()<>)})([([][]){<>()}][<[]<>>{[]{}}]))])}([{{(<{<>()}[()<>])(( +{{[({[[{([<<{<()()>[()[]]}{<<>{}>{{}()}}>>]<{<[<{}()>{[][]}][{[][]}[<><>>]>}>)}]][<((({({([]{}) +[(<[([<{[[{{<{{}[]}({}())>([{}[]]{[]})}([([]())<<><>>]<(())<<>>>)}[<[(<>{}){{}<>}]{{()<>}[<>{ +{{[{[<([{<[((<(){}><()[]>){[{}]({}<>)})(([()[]]<<>[]>)<[(){}]>]]{({[<>()][<>[]]}({[]{}}{{}[]}))[[[(){}][[]{} +{[<<<[<[{[<((<[]{}>)<([]<>){{}<>}>)<{([]())({}{})}>>](<([(<><>)[[]<>]]<{<><>}{()[]}>)>[(<<<>()><()[]>> +<[<((<<(<{(({<{}<>>{{}<>}}{<[]()>{<>{}}})){<[(<><>)<()<>>]>[{{<>{}}<(){}>}<{<><>}({}())>]}}>)>[[{<[[ +[([((<<([<{<[[()()]][[{}[]]]>{{(<>{})<<>()>][{[]()}]}}>])<([{<({{}()}<<>{}>)><[[()]<()[]>][[()<>](<> +{{((<[(({<[<[<[]<>>[(){}]](<[]<>><{}[]>)>][({{[]()}{<>[]}}{(()[]){<><>}})<[<{}[]>]>]>}<{[{{{<>[]}{{}()}}{{<> +({{({{{{{{[<[({}())[<><>]]>[(<<>[]>((){}))]]{{(<<>()>[{}[]])[{<>{}}<{}[]>]}{({{}()})}}}[[({{{}<>}<()()>}({() +[<<[((({<<<(({(){}}({}{})){<<>{}>{{}{}}}]((<[][]>{<>[]}))>>{[[([()()])<[()[]]{[]<>}>][(<<>()>({}[]))<({}[] +{(<<(<{({<<[[(<><>){(){}}][([]())([][])]](<<<>()>[[][]]>[({}{})[()<>]])>((<[[]<>]<{}()>>){<([][])[[]<> +<([{<[({{{[<{{()<>}(<><>)}{<{}()>[{}<>]}>{{[{}{}]<<>>}<[<>()]<<>[]>>}]{<<([][]){[]()}>[<{}()><()()>]>[ +(<<[[<(<{[<(([()<>]<()<>>){[{}[]][{}()]})<[[<><>]<[]>]<[[]()]{[]{}}>>>}<[[[<{}{}>(<>())]]{({<>{}}([ +[(([<(<(([(<<<{}{}>[[]()]>[<[][]>{[]}]><<<<>()>[[]{}]>([[][]]{<>()})>)(({<<><>>[()()]}))]))>((({(( +<<[[<{{({[{({(<><>)(()<>)}[[<><>]])[({<><>}([][]))[[[]()]([]{})]]}]<{({(<>{})[(){}]}({()<>}))([{( +({[<<<<[<(<[<[[]<>]([]<>)>{<(){}><[]()>}]{[(()<>)(()())][{(){}}[<>]]}>)>][(([({([][])<[][]>][{(){}}({})])<<{[ +<<({[(<{<(<({<[]<>>{()()}})<{<()[]>[[]()]}(((){}){<>})>>){[[<[{}()]>][{[(){}]({}[])}<[<>[]](<><>)>]]({(<< +<[([[(<<({(<<({}())]>{[[[]<>][[]()]]})<<{([]())[[]<>]}<(())<{}<>>>>{(([]{}){<>{}}){[{}()][(){}]}}>})>< +{(<{{[{<({[[[[{}()]({}[])]({()()}{{}[]})]{<[(){}]>([{}()]{{}{}})}](<{<{}[]>[{}[]]}((()[]){<>{}})>([{[]{ +<[(<({<(<[<{<([]<>)<<><>>>([<><>])}>]{([{(<><>)(<>())}[{()()}{(){}}]]){{{([]{}}{{}[]}}<{<>[]}[[ +<[<[[{([<({([<[]()><[]<>>])[([[]<>]{{}})]}<<<<[]<>>(()[])>({()()}<<>[]>)>[<{[]<>}>({()()}(()<>))]>)({( +{{<[(<{{{<[<(([]<>}[<>{}])><<<<>{}>([]())>[([][])]>]>}}}>)]>(({(<{<<<(({()}<[][]>)[<[]>{<><>} +({{[<[({[[{({{{}[])}<[<>[]][<><>]>)<{{[]{}}{{}[]}}>}]<((<(<>()){()}>)(<[{}()]{<><>}>(<()()>{()[]}) \ No newline at end of file diff --git a/day10/parseProgram.spec.ts b/day10/parseProgram.spec.ts new file mode 100644 index 0000000..b3484bc --- /dev/null +++ b/day10/parseProgram.spec.ts @@ -0,0 +1,19 @@ +import { parseProgram } from './parseProgram' + +describe('parseProgram()', () => { + it.each([ + ['()'], + ['[]'], + ['([])'], + ['{()()()}'], + ['<([{}])>'], + ['[<>({}){}[([])<>]]'], + ['(((((((((())))))))))'], + ])('should parse program %s', (program) => { + parseProgram(program) + }) + it.each([['(]'], ['{()()()>'], ['(((()))}'], ['<([]){()}[{}])']])( + 'should fail to parse program %s', + (program) => expect(() => parseProgram(program)).toThrow(), + ) +}) diff --git a/day10/parseProgram.ts b/day10/parseProgram.ts new file mode 100644 index 0000000..b291cd0 --- /dev/null +++ b/day10/parseProgram.ts @@ -0,0 +1,49 @@ +export const openingBraces = ['(', '[', '{', '<'] +export const closingBraces = [')', ']', '}', '>'] +export const braces = [...openingBraces, ...closingBraces] as const +export type Brace = typeof braces[number] +export type Chunk = Brace + +export class ParseError extends Error { + public readonly chunk: Chunk + public readonly position: number + public readonly program: string + constructor( + message: string, + chunk: Chunk, + position: number, + program: string, + ) { + super(message) + this.name = 'ParseError' + this.chunk = chunk + this.position = position + this.program = program + } +} + +export const parseProgram = ( + program: string, + index = 0, + stack: Chunk[] = [], +): Chunk[] => { + if (index >= program.length) return stack + const chunk = program[index] + if (!braces.includes(chunk)) + throw new Error(`Unexpected chunk ${chunk} at ${index}`) + if (closingBraces.includes(chunk)) { + const expectedOpeningBrace = openingBraces[closingBraces.indexOf(chunk)] + if (stack[stack.length - 1] !== expectedOpeningBrace) { + throw new ParseError( + `${program}\nExpected ${expectedOpeningBrace} at ${index}, got ${chunk}`, + chunk, + index, + program, + ) + } + stack.pop() + } else { + stack.push(chunk) + } + return parseProgram(program, ++index, stack) +} diff --git a/day10/solution.spec.ts b/day10/solution.spec.ts new file mode 100644 index 0000000..2a29a61 --- /dev/null +++ b/day10/solution.spec.ts @@ -0,0 +1,87 @@ +import { loader } from '../lib/loader' +import { completeProgram } from './completeProgram' +import { Brace, ParseError, parseProgram } from './parseProgram' + +const example = [ + '[({(<(())[]>[[{[]{<()<>>', + '[(()[<>])]({[<{<<[]>>(', + '{([(<{}[<>[]}>{[]{[(<()>', + '(((({<>}<{<{<>}{[]{[]{}', + '[[<[([]))<([[{}[[()]]]', + '[{[{({}]{}}([{[{{{}}([]', + '{<[[]]>}<{[{[{[]{()[[[]', + '[<(<(<(<{}))><([]([]()', + '<{([([[(<>()){}]>(<<{{', + '<{([{{}}[<[[[<>{}]]]>[]]', +] + +const input = loader(10)('input') + +const scores: Record = { + ')': 3, + ']': 57, + '}': 1197, + '>': 25137, +} + +const incompleteScores: Record = { + ')': 1, + ']': 2, + '}': 3, + '>': 4, +} + +describe('Day 10: Syntax Scoring', () => { + describe('Part 1', () => { + it('should solve the example', () => { + let score = 0 + for (const program of example) { + try { + parseProgram(program) + } catch (err) { + score += scores[(err as ParseError).chunk] + } + } + expect(score).toEqual(26397) + }) + it('should solve the puzzle', () => { + let score = 0 + for (const program of input) { + try { + parseProgram(program) + } catch (err) { + score += scores[(err as ParseError).chunk] + } + } + expect(score).toEqual(367227) + }) + }) + describe('Part 2', () => { + const scoreCompletions = (programs: string[]) => { + const scores: number[] = [] + for (const program of programs) { + try { + const stack = parseProgram(program) + if (stack.length > 0) { + const completion = completeProgram(program) + // Program is incomplete + let programScore = 0 + for (const brace of completion) { + programScore = programScore * 5 + incompleteScores[brace] + } + scores.push(programScore) + } + } catch { + // Ignore + } + } + return scores.sort((a, b) => a - b)[Math.floor(scores.length / 2)] + } + it('should solve the example', () => { + expect(scoreCompletions(example)).toEqual(288957) + }) + it('should solve the example', () => { + expect(scoreCompletions(input)).toEqual(3583341858) + }) + }) +}) diff --git a/day10_test.ts b/day10_test.ts deleted file mode 100644 index 661103e..0000000 --- a/day10_test.ts +++ /dev/null @@ -1,270 +0,0 @@ -import { assertEquals } from "https://deno.land/std@0.208.0/assert/assert_equals.ts"; - -Deno.test("Day 10: Pipe Maze", async (t) => { - await t.step("Part 1", async (t) => { - await t.step("Example", async (t) => { - await t.step("Example 1", () => - assertEquals( - findFurthestDistance([`-L|F7`, `7S-7|`, `L|7||`, `-L-J|`, `L|-JF`]), - 4, - )); - await t.step("Example 2", () => - assertEquals( - findFurthestDistance([`7-F7-`, `.FJ|7`, `SJLL7`, `|F--J`, `LJ.LJ`]), - 8, - )); - }); - - await t.step("it should solve", async () => - assertEquals( - findFurthestDistance( - (await Deno.readTextFile("./input/day10.txt")).split("\n"), - ), - 6738, - )); - }); - await t.step("Part 2", async (t) => { - await t.step("Example", async (t) => { - await t.step("Example 1", () => - assertEquals( - findInsideTiles([ - `..........`, - `.S------7.`, - `.|F----7|.`, - `.||....||.`, - `.||....||.`, - `.|L-7F-J|.`, - `.|..||..|.`, - `.L--JL--J.`, - `..........`, - ]), - 4, - )); - await t.step("Example 2", () => - assertEquals( - findInsideTiles([ - `...........`, - `.S-------7.`, - `.|F-----7|.`, - `.||.....||.`, - `.||.....||.`, - `.|L-7.F-J|.`, - `.|..|.|..|.`, - `.L--J.L--J.`, - `...........`, - ]), - 4, - )); - await t.step("Example 3", () => - assertEquals( - findInsideTiles([ - `.F----7F7F7F7F-7....`, - `.|F--7||||||||FJ....`, - `.||.FJ||||||||L7....`, - `FJL7L7LJLJ||LJ.L-7..`, - `L--J.L7...LJS7F-7L7.`, - `....F-J..F7FJ|L7L7L7`, - `....L7.F7||L7|.L7L7|`, - `.....|FJLJ|FJ|F7|.LJ`, - `....FJL-7.||.||||...`, - `....L---J.LJ.LJLJ...`, - ]), - 8, - )); - /* - TODO: 579 is the accepted answer, IF the startpoint S in the map is replaced with '|' - This solution is missing the handling of the pipe under the start position. - - await t.step("it should solve", async () => - assertEquals( - findInsideTiles( - (await Deno.readTextFile("./input/day10.txt")).split("\n") - ), - 579 - ) - ); - */ - }); - }); -}); - -const findFurthestDistance = (mapRows: Array): number => { - const map = mapRows.map((s) => s.split("")); - const start = findStart(map); - if (start === null) throw new Error(`Start not found!`); - return ( - floodFill(map, start) - // sort by distance - .sort((p1, p2) => p1[2] - p2[2]) - .pop()?.[2] as number - ); -}; - -const findStart = (map: Array>): [number, number] | null => { - for (let row = 0; row < map.length; row++) { - for (let col = 0; col < map[row].length; col++) { - if (isStart(map[row][col])) return [row, col]; - } - } - return null; -}; - -enum Connection { - N = "North", - S = "South", - E = "East", - W = "West", -} -const connectingTiles: Array<{ tile: string; connections: Connection[] }> = [ - { tile: "|", connections: [Connection.N, Connection.S] }, // is a vertical pipe connecting north and south. - { tile: "-", connections: [Connection.E, Connection.W] }, // is a horizontal pipe connecting east and west. - { tile: "L", connections: [Connection.N, Connection.E] }, // is a 90-degree bend connecting north and east. - { tile: "J", connections: [Connection.N, Connection.W] }, // is a 90-degree bend connecting north and west. - { tile: "7", connections: [Connection.S, Connection.W] }, // is a 90-degree bend connecting south and west. - { tile: "F", connections: [Connection.S, Connection.E] }, // is a 90-degree bend connecting south and east. -]; - -const isConnection = (connection: Connection, tile: string): boolean => - connectingTiles.find( - ({ tile: t, connections }) => - tile === t && connections.includes(connection), - ) !== undefined; - -const equals = (p1: [number, number], p2: [number, number]) => - p1[0] === p2[0] && p1[1] === p2[1]; - -// Find the loop by following the pipes -const floodFill = (map: Array>, start: [number, number]) => { - const queue: Array<[number, number, number]> = [[...start, 0]]; - const filled: Array<[number, number, number]> = []; - const hasFilled = (pos: [number, number]) => - filled.find((p) => equals([p[0], p[1]], pos)); - while (queue.length > 0) { - const [row, col, distance] = queue.shift() as [number, number, number]; - filled.push([row, col, distance]); - // What is the current tile - const tile = map[row][col]; - if (tile === undefined) continue; // out of bounds - if (tile === ".") continue; // Ground, no pipe here - - const up: [number, number] = [row - 1, col]; - const down: [number, number] = [row + 1, col]; - const left: [number, number] = [row, col - 1]; - const right: [number, number] = [row, col + 1]; - - const upTile = map[up[0]]?.[up[1]]; - const downTile = map[down[0]]?.[down[1]]; - const leftTile = map[left[0]]?.[left[1]]; - const rightTile = map[right[0]]?.[right[1]]; - - if ( - !hasFilled(up) && - (isStart(tile) || isConnection(Connection.N, tile)) && - isConnection(Connection.S, upTile) - ) { - queue.push([...up, distance + 1]); - } - - if ( - !hasFilled(down) && - (isStart(tile) || isConnection(Connection.S, tile)) && - isConnection(Connection.N, downTile) - ) { - queue.push([...down, distance + 1]); - } - - if ( - !hasFilled(left) && - (isStart(tile) || isConnection(Connection.W, tile)) && - isConnection(Connection.E, leftTile) - ) { - queue.push([...left, distance + 1]); - } - - if ( - !hasFilled(right) && - (isStart(tile) || isConnection(Connection.E, tile)) && - isConnection(Connection.W, rightTile) - ) { - queue.push([...right, distance + 1]); - } - } - return filled; -}; - -const isStart = (tile: string) => tile === "S"; - -const findInsideTiles = (mapRows: Array): number => { - const map = mapRows.map((s) => s.split("")); - - const start = findStart(map); - if (start === null) throw new Error(`Start not found!`); - const pipes = floodFill(map, start); - const insideTiles: Array<[number, number]> = []; - - for (let row = 0; row < map.length; row++) { - for (let col = 0; col < map[row].length; col++) { - // Any tile that isn't part of the main loop can count as being enclosed by the loop. - const maybePipe = pipes.find((pipe) => - equals([pipe[0], pipe[1]], [row, col]) - ); - if (maybePipe !== undefined) continue; - // Use Point-in-polygon to determine if point is in loop - // See https://en.wikipedia.org/wiki/Point_in_polygon - let isInside = false; - let lastSymbol: string | undefined = undefined; - // Count the number of times the ray intersects vertical pipes - for (let x = 0; x <= col; x++) { - const maybePipe = pipes.find((pipe) => - equals([pipe[0], pipe[1]], [row, x]) - ); - if (maybePipe === undefined) continue; - const pipeSymbol = map[row][x]; - // Hack: uncomment to make the solution work - // if (isStart(pipeSymbol)) pipeSymbol = "|"; - if (pipeSymbol === "|") isInside = !isInside; // pipe - if (pipeSymbol === "F" || pipeSymbol === "L") lastSymbol = pipeSymbol; // opened corner - if (pipeSymbol === "7" && lastSymbol === "F") lastSymbol = undefined; // closed corner - if (pipeSymbol === "J" && lastSymbol === "L") lastSymbol = undefined; // closed corner - if (pipeSymbol === "7" && lastSymbol === "L") isInside = !isInside; // direction change - if (pipeSymbol === "J" && lastSymbol === "F") isInside = !isInside; // direction change - } - if (isInside) insideTiles.push([row, col]); - } - } - - printMap(map, insideTiles, pipes); - - return insideTiles.length; -}; - -const printMap = ( - map: Array>, - insideTiles: Array<[number, number]>, - pipes: Array<[number, number, number]>, -) => { - for (let row = 0; row < map.length; row++) { - for (let col = 0; col < map[row].length; col++) { - let char = map[row][col]; - if (insideTiles.find((p) => equals(p, [row, col]))) { - char = "▓"; - } else if (!pipes.find((p) => equals([p[0], p[1]], [row, col]))) { - char = "░"; - } - - Deno.stdout.writeSync( - new TextEncoder().encode( - char - .replaceAll(".", "░") - .replaceAll("F", "┌") - .replaceAll("|", "│") - .replaceAll("L", "└") - .replaceAll("7", "┐") - .replaceAll("J", "┘") - .replaceAll("S", "✕"), - ), - ); - } - Deno.stdout.writeSync(new TextEncoder().encode("\n")); - } -}; diff --git a/day11/countFlashes.ts b/day11/countFlashes.ts new file mode 100644 index 0000000..466a21f --- /dev/null +++ b/day11/countFlashes.ts @@ -0,0 +1,27 @@ +import { Generation, step } from './game' + +export const countFlashes = (generation: Generation, steps: number): number => { + let flashes = 0 + for (let i = 0; i < steps; i++) { + generation = step(generation, (numFlashes) => { + flashes += numFlashes + }) + } + return flashes +} + +export const allFlash = ( + generation: Generation, + limit = Number.MAX_SAFE_INTEGER, +): number => { + const squids = generation.length * generation[0].length + let flashes = 0 + let stepNum = 0 + do { + generation = step(generation, (numFlashes) => { + flashes = numFlashes + }) + stepNum++ + } while (flashes < squids && stepNum < limit) + return stepNum +} diff --git a/day11/game.spec.ts b/day11/game.spec.ts new file mode 100644 index 0000000..4ed11b2 --- /dev/null +++ b/day11/game.spec.ts @@ -0,0 +1,71 @@ +import { render } from '../day05/render' +import { generation, step } from './game' + +describe('Glowing Octopus Game of Life', () => { + it('should calculate the next generation', () => { + const start = generation( + `11111 + 19991 + 19191 + 19991 + 11111`, + ) + const gen1 = step(start) + const gen2 = step(gen1) + expect(render(gen1)).toEqual( + render( + generation( + `34543 + 40004 + 50005 + 40004 + 34543`, + ), + ), + ) + expect(render(gen2)).toEqual( + render( + generation( + `45654 + 51115 + 61116 + 51115 + 45654`, + ), + ), + ) + }) + it('should calculate a bigger example', () => { + let gen = generation( + `5483143223 + 2745854711 + 5264556173 + 6141336146 + 6357385478 + 4167524645 + 2176841721 + 6882881134 + 4846848554 + 5283751526`, + ) + for (let i = 0; i < 10; i++) { + gen = step(gen) + } + expect(render(gen)).toEqual( + render( + generation( + `0481112976 + 0031112009 + 0041112504 + 0081111406 + 0099111306 + 0093511233 + 0442361130 + 5532252350 + 0532250600 + 0032240000`, + ), + ), + ) + }) +}) diff --git a/day11/game.ts b/day11/game.ts new file mode 100644 index 0000000..db011ea --- /dev/null +++ b/day11/game.ts @@ -0,0 +1,113 @@ +const trim = (s: string): string => s.trim() + +export type Generation = number[][] + +export const generation = (squids: string): Generation => + squids + .split('\n') + .map(trim) + .map((s) => s.split('').map((s) => parseInt(s, 10))) + +export const render = (generation: Generation): string => + generation.map((row) => row.join('')).join('\n') + +/** + * You can model the energy levels and flashes of light in steps. During a single step, the following occurs: + * - First, the energy level of each octopus increases by 1. + * - Then, any octopus with an energy level greater than 9 flashes. + * This increases the energy level of all adjacent octopuses by 1, including octopuses that are diagonally adjacent. + * If this causes an octopus to have an energy level greater than 9, it also flashes. + * This process continues as long as new octopuses keep having their energy level increased beyond 9. + * (An octopus can only flash at most once per step.) + * - Finally, any octopus that flashed during this step has its energy level set to 0, as it used all of its energy to flash. + */ +export const step = ( + generation: Generation, + onFlashes?: (_: number) => void, +): Generation => { + const flashing: boolean[][] = [] + const nextGeneration: Generation = [] + // First, the energy level of each octopus increases by 1. + for (let y = 0; y < generation.length; y++) { + for (let x = 0; x < generation[y].length; x++) { + const current = generation[y][x] + if (nextGeneration[y] === undefined) { + nextGeneration[y] = [] + flashing[y] = [] + } + nextGeneration[y][x] = current + 1 + } + } + // Then, any octopus with an energy level greater than 9 flashes. + do { + for (let y = 0; y < nextGeneration.length; y++) { + for (let x = 0; x < nextGeneration[y].length; x++) { + const current = nextGeneration[y][x] + if ( + current > 9 && + // (An octopus can only flash at most once per step.) + flashing[y][x] !== true + ) { + // Flashing + flashing[y][x] = true + // This increases the energy level of all adjacent octopuses by 1, including octopuses that are diagonally adjacent. + const N = nextGeneration[y - 1]?.[x] + const NE = nextGeneration[y - 1]?.[x + 1] + const E = nextGeneration[y]?.[x + 1] + const SE = nextGeneration[y + 1]?.[x + 1] + const S = nextGeneration[y + 1]?.[x] + const SW = nextGeneration[y + 1]?.[x - 1] + const W = nextGeneration[y]?.[x - 1] + const NW = nextGeneration[y - 1]?.[x - 1] + if (N !== undefined) { + nextGeneration[y - 1][x]++ + } + if (NE !== undefined) { + nextGeneration[y - 1][x + 1]++ + } + if (E !== undefined) { + nextGeneration[y][x + 1]++ + } + if (SE !== undefined) { + nextGeneration[y + 1][x + 1]++ + } + if (S !== undefined) { + nextGeneration[y + 1][x]++ + } + if (SW !== undefined) { + nextGeneration[y + 1][x - 1]++ + } + if (W !== undefined) { + nextGeneration[y][x - 1]++ + } + if (NW !== undefined) { + nextGeneration[y - 1][x - 1]++ + } + } + } + } + } while ( + // This process continues as long as new octopuses keep having their energy level increased beyond 9. + (() => { + for (let y = 0; y < nextGeneration.length; y++) { + for (let x = 0; x < nextGeneration[y].length; x++) { + const current = nextGeneration[y][x] + if (current > 9 && flashing[y][x] !== true) return true + } + } + return false + })() + ) + // Finally, any octopus that flashed during this step has its energy level set to 0, as it used all of its energy to flash. + let flashes = 0 + for (let y = 0; y < nextGeneration.length; y++) { + for (let x = 0; x < nextGeneration[y].length; x++) { + if (flashing[y][x]) { + nextGeneration[y][x] = 0 + flashes++ + } + } + } + onFlashes?.(flashes) + return nextGeneration +} diff --git a/day11/solution.spec.ts b/day11/solution.spec.ts new file mode 100644 index 0000000..c4e9685 --- /dev/null +++ b/day11/solution.spec.ts @@ -0,0 +1,85 @@ +import { allFlash, countFlashes } from './countFlashes' +import { generation } from './game' + +describe('Day 11: Dumbo Octopus', () => { + describe('Part 1', () => { + it('should solve the example', () => { + //After 100 steps, there have been a total of 1656 flashes. + expect( + countFlashes( + generation( + `5483143223 + 2745854711 + 5264556173 + 6141336146 + 6357385478 + 4167524645 + 2176841721 + 6882881134 + 4846848554 + 5283751526`, + ), + 100, + ), + ).toEqual(1656) + }) + it('should solve the puzzle', () => { + expect( + countFlashes( + generation( + `3265255276 + 1537412665 + 7335746422 + 6426325658 + 3854434364 + 8717377486 + 4522286326 + 6337772845 + 8824387665 + 6351586484`, + ), + 100, + ), + ).toEqual(1627) + }) + }) + describe('Part 2', () => { + it('should solve the example', () => { + // the first time all octopuses flash simultaneously is step 195 + expect( + allFlash( + generation( + `5483143223 + 2745854711 + 5264556173 + 6141336146 + 6357385478 + 4167524645 + 2176841721 + 6882881134 + 4846848554 + 5283751526`, + ), + ), + ).toEqual(195) + }) + it('should solve the puzzle', () => { + expect( + allFlash( + generation( + `3265255276 + 1537412665 + 7335746422 + 6426325658 + 3854434364 + 8717377486 + 4522286326 + 6337772845 + 8824387665 + 6351586484`, + ), + ), + ).toEqual(329) + }) + }) +}) diff --git a/day11_test.ts b/day11_test.ts deleted file mode 100644 index 0555192..0000000 --- a/day11_test.ts +++ /dev/null @@ -1,252 +0,0 @@ -import { assertEquals } from "https://deno.land/std@0.208.0/assert/assert_equals.ts"; -import { sum } from "./util/sum.ts"; -import { uniqueCombinations } from "./util/uniqueCombinations.ts"; -import { manhattanDistance } from "./util/manhattanDistance.ts"; - -Deno.test("Day 11: Cosmic Expansion", async (t) => { - await t.step("Part 1", async (t) => { - await t.step("Example", () => - assertEquals( - sum( - galaxyPathes( - expandPositions( - galaxyPositions([ - `...#......`, - `.......#..`, - `#.........`, - `..........`, - `......#...`, - `.#........`, - `.........#`, - `..........`, - `.......#..`, - `#...#.....`, - ]) - ) - ).map(([, , length]) => length) - ), - 374 - ) - ); - - await t.step("it should solve", async () => - assertEquals( - sum( - galaxyPathes( - expandPositions( - galaxyPositions( - (await Deno.readTextFile("./input/day11.txt")).split("\n") - ) - ) - ).map(([, , length]) => length) - ), - 10165598 - ) - ); - }); - - await t.step("Part 2", async (t) => { - await t.step("Example 1", () => - assertEquals( - sum( - galaxyPathes( - expandPositions( - galaxyPositions([ - `...#......`, - `.......#..`, - `#.........`, - `..........`, - `......#...`, - `.#........`, - `.........#`, - `..........`, - `.......#..`, - `#...#.....`, - ]), - 10 - ) - ).map(([, , length]) => length) - ), - 1030 - ) - ); - - await t.step("Example 2", () => - assertEquals( - sum( - galaxyPathes( - expandPositions( - galaxyPositions([ - `...#......`, - `.......#..`, - `#.........`, - `..........`, - `......#...`, - `.#........`, - `.........#`, - `..........`, - `.......#..`, - `#...#.....`, - ]), - 100 - ) - ).map(([, , length]) => length) - ), - 8410 - ) - ); - - await t.step("it should solve", async () => - assertEquals( - sum( - galaxyPathes( - expandPositions( - galaxyPositions( - (await Deno.readTextFile("./input/day11.txt")).split("\n") - ), - 1000000 - ) - ).map(([, , length]) => length) - ), - 678728808158 - ) - ); - }); - - await t.step("galaxyPositions()", () => - assertEquals( - galaxyPositions([ - `...#......`, - `.......#..`, - `#.........`, - `..........`, - `......#...`, - `.#........`, - `.........#`, - `..........`, - `.......#..`, - `#...#.....`, - ]), - [ - [0, 3], - [1, 7], - [2, 0], - [4, 6], - [5, 1], - [6, 9], - [8, 7], - [9, 0], - [9, 4], - ] - ) - ); - - await t.step("expandPositions()", () => - assertEquals( - expandPositions( - galaxyPositions([ - `...#......`, - `.......#..`, - `#.........`, - `..........`, - `......#...`, - `.#........`, - `.........#`, - `..........`, - `.......#..`, - `#...#.....`, - ]) - ), - galaxyPositions([ - `....#........`, - `.........#...`, - `#............`, - `.............`, - `.............`, - `........#....`, - `.#...........`, - `............#`, - `.............`, - `.............`, - `.........#...`, - `#....#.......`, - ]) - ) - ); -}); - -type Path = [from: [number, number], to: [number, number], length: number]; - -const galaxyPositions = (galaxy: Array): Array<[number, number]> => - galaxy - .reduce>>( - (galaxies, rowString, row) => [ - ...galaxies, - rowString - .split("") - .reduce>( - (galaxies, maybeGalaxy, col) => - isGalaxy(maybeGalaxy) ? [...galaxies, [row, col]] : galaxies, - [] - ), - ], - [] - ) - .flat(); - -const galaxyPathes = (galaxies: Array<[number, number]>): Path[] => - uniqueCombinations<[number, number]>(2)(galaxies).map(([from, to]) => [ - from, - to, - manhattanDistance(from, to), - ]); -const isGalaxy = (square: string): boolean => square === "#"; - -const expandPositions = ( - galaxies: Array<[number, number]>, - amount = 1 -): Array<[number, number]> => { - const cols = galaxies.map(([, col]) => col).sort((a, b) => a - b); - const left = cols[0]; - const right = cols[cols.length - 1]; - const colsWithOutGalaxies = []; - for (let col = left; col < right; col++) { - const galaxiesOnCol = galaxies.find(([, gcol]) => col === gcol); - if (galaxiesOnCol === undefined) colsWithOutGalaxies.push(col); - } - const rows = galaxies.map(([row]) => row).sort((a, b) => a - b); - const top = rows[0]; - const bottom = rows[rows.length - 1]; - const rowsWithoutGalaxies = []; - for (let row = top; row < bottom; row++) { - const galaxiesOnRow = galaxies.find(([grow]) => row === grow); - if (galaxiesOnRow === undefined) rowsWithoutGalaxies.push(row); - } - - const shifted: Array<[number, number]> = [...galaxies]; - // Shift by cols - let colShift = 0; - for (const col of colsWithOutGalaxies) { - for (let g = 0; g < galaxies.length; g++) { - // Move all galaxies right of the col - if (galaxies[g][1] > col + colShift) { - galaxies[g][1] += Math.max(amount - 1, 1); - } - } - // The next shifts are cumulative - colShift += Math.max(amount - 1, 1); - } - // Shift by rows - let rowShift = 0; - for (const row of rowsWithoutGalaxies) { - for (let g = 0; g < galaxies.length; g++) { - // Move all galaxies below the row - if (galaxies[g][0] > row + rowShift) { - galaxies[g][0] += Math.max(amount - 1, 1); - } - } - // The next shifts are cumulative - rowShift += Math.max(amount - 1, 1); - } - return shifted; -}; diff --git a/day12/caveNavigator.ts b/day12/caveNavigator.ts new file mode 100644 index 0000000..03e337e --- /dev/null +++ b/day12/caveNavigator.ts @@ -0,0 +1,111 @@ +import { isBigCave } from './isBigCave' + +type Connection = { + from: string + to: string +} + +type Route = string[] + +export const parseMap = (connections: string[]): Connection[] => + connections.map((connection) => { + const [from, to] = connection.split('-') + return { + from, + to, + } + }) + +const routeToString = (route: Route): string => route.join(',') + +const canVisit = + (path: Route, options?: NavigateOptions) => + (target: string): boolean => { + if (isBigCave(target)) return true + + const allowOneSmallCaveTwice = options?.allowOneSmallCaveTwice ?? false + if (!allowOneSmallCaveTwice) + return path.find((visited) => visited === target) === undefined + + const visitedBefore = + path.filter((visited) => visited === target) !== undefined + if (!visitedBefore) return true + // Collect the visits per small cage + const visits = path.reduce((visitorCount, p) => { + if (isBigCave(p)) return visitorCount + return { + ...visitorCount, + [p]: (visitorCount[p] ?? 0) + 1, + } + }, {} as Record) + // Make sure we haven't visited the target already twice + if ((visits[target] ?? 0) > 1) { + return false + } + // Make sure we haven't visited any other small cave twice + const doubleVisits = Object.values(visits).filter((v) => v > 1) + const canVisit = doubleVisits.length <= 1 + return canVisit + } + +type NavigateOptions = { allowOneSmallCaveTwice: boolean } + +const navigateCaves = ( + connections: Connection[], + path: Route, + onEnd: (_: Route) => void, + options?: NavigateOptions, +) => { + const current = path[path.length - 1] + const forward = connections // Forward connections + .filter(({ from }) => from === current) + .map(({ to }) => to) + // Can't go back to start + .filter((target) => target !== 'start') + // Cant' revisit small cages + .filter(canVisit(path, options)) + const backward = connections + .filter(({ to }) => to === current) + .map(({ from }) => from) + // Can't go back to start + .filter((target) => target !== 'start') + // Cant' revisit small cages + .filter(canVisit(path, options)) + + const nextConnections: string[] = [...forward, ...backward] + for (const connection of nextConnections) { + // End reached + if (connection === 'end') { + const routeToEnd = [...path, connection] + onEnd(routeToEnd) + continue + } + navigateCaves(connections, [...path, connection], onEnd, options) + } + // Dead end +} + +export const findPathes = ( + connections: Connection[], + options?: NavigateOptions, +): string[] => { + const starts = [ + ...connections.filter(({ from }) => from === 'start').map(({ to }) => to), + ...connections.filter(({ to }) => to === 'start').map(({ from }) => from), + ] + const pathes: Route[] = [] + for (const start of starts) { + navigateCaves( + connections, + ['start', start], + (route) => { + pathes.push(route) + }, + options, + ) + } + return pathes.map(routeToString) +} + +const example = ['start-A', 'start-b', 'A-c', 'A-b', 'b-d', 'A-end', 'b-end'] +findPathes(parseMap(example)) diff --git a/day12/isBigCave.spec.ts b/day12/isBigCave.spec.ts new file mode 100644 index 0000000..a29ff13 --- /dev/null +++ b/day12/isBigCave.spec.ts @@ -0,0 +1,12 @@ +import { isBigCave } from './isBigCave' + +describe('isBigCave', () => { + it.each([ + ['start', false], + ['A', true], + ['Abc', false], + ['ABC', true], + ])('should determine cave %s as big: %b', (name, expected) => + expect(isBigCave(name)).toEqual(expected), + ) +}) diff --git a/day12/isBigCave.ts b/day12/isBigCave.ts new file mode 100644 index 0000000..7eae2a6 --- /dev/null +++ b/day12/isBigCave.ts @@ -0,0 +1 @@ +export const isBigCave = (name: string): boolean => /^[A-Z]+$/.test(name) diff --git a/day12/solution.spec.ts b/day12/solution.spec.ts new file mode 100644 index 0000000..7440225 --- /dev/null +++ b/day12/solution.spec.ts @@ -0,0 +1,170 @@ +import { findPathes, parseMap } from './caveNavigator' + +const example1 = ['start-A', 'start-b', 'A-c', 'A-b', 'b-d', 'A-end', 'b-end'] + +const example2 = [ + 'dc-end', + 'HN-start', + 'start-kj', + 'dc-start', + 'dc-HN', + 'LN-dc', + 'HN-end', + 'kj-sa', + 'kj-HN', + 'kj-dc', +] +const example3 = [ + 'fs-end', + 'he-DX', + 'fs-he', + 'start-DX', + 'pj-DX', + 'end-zg', + 'zg-sl', + 'zg-pj', + 'pj-he', + 'RW-he', + 'fs-DX', + 'pj-RW', + 'zg-RW', + 'start-pj', + 'he-WI', + 'zg-he', + 'pj-fs', + 'start-RW', +] + +const input = [ + 'GC-zi', + 'end-zv', + 'lk-ca', + 'lk-zi', + 'GC-ky', + 'zi-ca', + 'end-FU', + 'iv-FU', + 'lk-iv', + 'lk-FU', + 'GC-end', + 'ca-zv', + 'lk-GC', + 'GC-zv', + 'start-iv', + 'zv-QQ', + 'ca-GC', + 'ca-FU', + 'iv-ca', + 'start-lk', + 'zv-FU', + 'start-zi', +] + +describe('Day 12: Passage Pathing', () => { + describe('Part 1', () => { + it('should solve the first example', () => { + const pathes = findPathes(parseMap(example1)) + expect(pathes.length).toEqual(10) + expect(pathes.sort((a, b) => a.localeCompare(b))).toEqual( + [ + 'start,A,b,A,c,A,end', + 'start,A,b,A,end', + 'start,A,b,end', + 'start,A,c,A,b,A,end', + 'start,A,c,A,b,end', + 'start,A,c,A,end', + 'start,A,end', + 'start,b,A,c,A,end', + 'start,b,A,end', + 'start,b,end', + ].sort((a, b) => a.localeCompare(b)), + ) + }) + it('should solve the second example', () => { + const pathes = findPathes(parseMap(example2)) + expect(pathes.length).toEqual(19) + expect(pathes.sort((a, b) => a.localeCompare(b))).toEqual( + [ + 'start,HN,dc,HN,end', + 'start,HN,dc,HN,kj,HN,end', + 'start,HN,dc,end', + 'start,HN,dc,kj,HN,end', + 'start,HN,end', + 'start,HN,kj,HN,dc,HN,end', + 'start,HN,kj,HN,dc,end', + 'start,HN,kj,HN,end', + 'start,HN,kj,dc,HN,end', + 'start,HN,kj,dc,end', + 'start,dc,HN,end', + 'start,dc,HN,kj,HN,end', + 'start,dc,end', + 'start,dc,kj,HN,end', + 'start,kj,HN,dc,HN,end', + 'start,kj,HN,dc,end', + 'start,kj,HN,end', + 'start,kj,dc,HN,end', + 'start,kj,dc,end', + ].sort((a, b) => a.localeCompare(b)), + ) + }) + it('should solve the third example', () => + expect(findPathes(parseMap(example3)).length).toEqual(226)) + it('should solve the puzzle', () => + expect(findPathes(parseMap(input)).length).toEqual(5252)) + }) + describe('Part 2', () => { + const options = { + allowOneSmallCaveTwice: true, + } + it('should solve the first example', () => { + const pathes = findPathes(parseMap(example1), options) + expect(pathes.length).toEqual(36) + expect(pathes.sort((a, b) => a.localeCompare(b))).toEqual( + [ + 'start,A,b,A,b,A,c,A,end', + 'start,A,b,A,b,A,end', + 'start,A,b,A,b,end', + 'start,A,b,A,c,A,b,A,end', + 'start,A,b,A,c,A,b,end', + 'start,A,b,A,c,A,c,A,end', + 'start,A,b,A,c,A,end', + 'start,A,b,A,end', + 'start,A,b,d,b,A,c,A,end', + 'start,A,b,d,b,A,end', + 'start,A,b,d,b,end', + 'start,A,b,end', + 'start,A,c,A,b,A,b,A,end', + 'start,A,c,A,b,A,b,end', + 'start,A,c,A,b,A,c,A,end', + 'start,A,c,A,b,A,end', + 'start,A,c,A,b,d,b,A,end', + 'start,A,c,A,b,d,b,end', + 'start,A,c,A,b,end', + 'start,A,c,A,c,A,b,A,end', + 'start,A,c,A,c,A,b,end', + 'start,A,c,A,c,A,end', + 'start,A,c,A,end', + 'start,A,end', + 'start,b,A,b,A,c,A,end', + 'start,b,A,b,A,end', + 'start,b,A,b,end', + 'start,b,A,c,A,b,A,end', + 'start,b,A,c,A,b,end', + 'start,b,A,c,A,c,A,end', + 'start,b,A,c,A,end', + 'start,b,A,end', + 'start,b,d,b,A,c,A,end', + 'start,b,d,b,A,end', + 'start,b,d,b,end', + 'start,b,end', + ].sort((a, b) => a.localeCompare(b)), + ) + }) + it('should solve the second example', () => + expect(findPathes(parseMap(example2), options).length).toEqual(103)) + it('should solve the third example', () => + expect(findPathes(parseMap(example3), options).length).toEqual(3509)) + it('should solve the puzzle', () => + expect(findPathes(parseMap(input), options).length).toEqual(147784)) + }) +}) diff --git a/day13/flip.spec.ts b/day13/flip.spec.ts new file mode 100644 index 0000000..98a3fe9 --- /dev/null +++ b/day13/flip.spec.ts @@ -0,0 +1,12 @@ +import { flip } from './flip' + +describe('flip()', () => { + it.each([ + [14, 7, 0], + [13, 7, 1], + [8, 7, 6], + [7, 7, 7], + ])('should flip position %d folded at %d to %d', (n, flipPos, expected) => { + expect(flip(n, flipPos)).toEqual(expected) + }) +}) diff --git a/day13/flip.ts b/day13/flip.ts new file mode 100644 index 0000000..1ea4028 --- /dev/null +++ b/day13/flip.ts @@ -0,0 +1,16 @@ +/** + * . 0 + * . . + * . . + * - > + * . . + * . . + * 5 . + */ +export const flip = (pos: number, flipPos: number): number => { + const delta = pos - flipPos + if (delta === 0) return pos + const flipped = pos - delta * 2 + if (flipped < 0) throw new Error(`Failed to flip ${pos} at ${flipPos}`) + return flipped +} diff --git a/day13/fold.ts b/day13/fold.ts new file mode 100644 index 0000000..a97bfa7 --- /dev/null +++ b/day13/fold.ts @@ -0,0 +1,71 @@ +import { flip } from './flip' +import { Fold, Position } from './parseInstructions' + +export type Sheet = { + coordinates: Position[] + maxX: number + maxY: number +} + +export const fold = ( + { + coordinates, + maxX, + maxY, + }: { + coordinates: Position[] + maxX?: number + maxY?: number + }, + fold: Fold, +): Sheet => { + const folded: Position[] = [] + maxX = maxX ?? coordinates.reduce((maxX, [x]) => (x > maxX ? x : maxX), 0) + maxY = maxY ?? coordinates.reduce((maxY, [, y]) => (y > maxY ? y : maxY), 0) + // Horizontal fold + if ('y' in fold) { + // Copy all points above y + folded.push(...coordinates.filter(([, y]) => y <= fold.y)) + // Flip y for all points on and below + folded.push( + ...coordinates + .filter(([, y]) => y > fold.y) + .map(([x, y]) => [x, flip(y, fold.y)] as Position), + ) + return { + coordinates: removeDupes(folded), + maxX, + maxY: fold.y - 1, + } + } + // Vertical fold + // Copy all points left of x + folded.push(...coordinates.filter(([x]) => x <= fold.x)) + // Flip y for all points on and below + folded.push( + ...coordinates + .filter(([x]) => x > fold.x) + .map(([x, y]) => [flip(x, fold.x), y] as Position), + ) + return { + coordinates: removeDupes(folded), + maxX: fold.x - 1, + maxY, + } +} + +const removeDupes = (coordinates: Position[]): Position[] => { + const uniquePoints: Position[] = [] + const dotMap = coordinates.reduce((dotMap, [x, y]) => { + if (dotMap[y] === undefined) dotMap[y] = [] + dotMap[y][x] = true + return dotMap + }, [] as boolean[][]) + for (let y = 0; y < dotMap.length; y++) { + for (let x = 0; x < dotMap[y]?.length ?? 0; x++) { + const level = dotMap[y][x] + if (level !== undefined) uniquePoints.push([x, y]) + } + } + return uniquePoints +} diff --git a/day13/input.txt b/day13/input.txt new file mode 100644 index 0000000..7f69cf1 --- /dev/null +++ b/day13/input.txt @@ -0,0 +1,809 @@ +1053,618 +966,812 +363,813 +663,488 +582,93 +112,175 +887,158 +647,406 +1049,281 +820,632 +828,429 +1208,203 +604,15 +308,721 +790,380 +1007,665 +60,456 +460,507 +192,639 +45,180 +192,626 +627,604 +458,435 +683,738 +1121,745 +435,285 +902,74 +246,522 +734,609 +1005,861 +776,610 +910,491 +189,745 +216,362 +559,427 +8,465 +551,229 +855,163 +875,609 +658,203 +1243,270 +853,859 +10,457 +1012,471 +587,320 +666,94 +1205,543 +646,599 +619,305 +862,473 +73,630 +228,406 +850,410 +720,339 +338,273 +1300,273 +728,93 +915,432 +390,599 +460,484 +589,522 +721,837 +557,298 +402,497 +1130,40 +908,497 +646,156 +872,466 +1161,674 +470,728 +751,736 +549,385 +633,33 +1012,423 +858,98 +490,878 +276,351 +999,665 +216,87 +892,603 +915,574 +236,295 +328,225 +1273,287 +768,127 +1169,661 +1079,288 +902,820 +768,623 +797,833 +524,429 +1123,812 +1002,721 +460,36 +574,746 +139,588 +965,143 +711,810 +1230,605 +910,28 +395,574 +1176,514 +438,807 +932,787 +489,735 +144,779 +940,193 +867,364 +920,508 +438,700 +7,635 +284,473 +98,700 +443,28 +1156,74 +1138,429 +716,75 +164,508 +701,714 +311,437 +256,432 +268,642 +271,733 +229,540 +180,376 +323,134 +1029,42 +400,476 +633,161 +733,883 +723,208 +355,626 +482,380 +793,386 +326,396 +1186,477 +1210,752 +261,165 +1111,778 +1265,714 +58,231 +1302,429 +95,427 +974,771 +378,787 +246,466 +187,812 +892,155 +378,15 +472,115 +1300,173 +627,380 +1278,571 +653,735 +1192,707 +1066,788 +445,403 +440,127 +431,765 +599,597 +98,787 +920,386 +559,19 +189,644 +291,276 +346,511 +291,813 +785,35 +1205,285 +214,91 +589,837 +310,812 +1044,19 +622,771 +1046,162 +418,333 +920,732 +805,674 +1289,801 +547,642 +1246,530 +706,15 +8,429 +1161,628 +1074,295 +124,513 +502,661 +945,63 +720,555 +432,511 +154,372 +1169,233 +555,639 +160,651 +377,310 +75,792 +448,421 +850,403 +366,381 +90,291 +180,40 +489,287 +1211,255 +822,460 +795,812 +1046,508 +984,498 +1170,686 +691,500 +669,283 +939,679 +27,626 +1289,462 +723,110 +146,588 +651,760 +634,411 +492,673 +341,163 +435,609 +1121,834 +1302,795 +835,213 +604,799 +228,854 +177,668 +482,429 +8,123 +1042,63 +982,669 +1283,156 +622,323 +10,621 +638,418 +373,852 +244,445 +515,82 +472,563 +966,628 +774,259 +391,93 +604,719 +633,733 +735,838 +458,877 +214,543 +638,266 +982,673 +879,681 +490,262 +900,445 +572,746 +964,487 +261,829 +408,820 +805,611 +129,523 +443,364 +118,707 +1123,306 +482,17 +964,511 +765,892 +612,193 +790,514 +115,28 +452,641 +301,467 +785,859 +18,855 +604,787 +472,775 +788,822 +969,163 +653,159 +736,652 +1212,194 +166,236 +515,677 +73,182 +1163,380 +624,598 +882,80 +677,733 +845,250 +1081,354 +134,380 +556,283 +524,465 +59,457 +236,519 +1150,651 +268,63 +923,217 +147,661 +1143,760 +507,787 +1307,358 +595,437 +688,323 +109,178 +852,17 +400,866 +70,333 +371,679 +646,74 +1158,240 +388,19 +815,358 +1310,221 +440,543 +957,427 +281,42 +850,627 +294,515 +266,539 +124,477 +1171,217 +723,494 +664,156 +52,585 +482,465 +172,148 +992,17 +1130,376 +1138,17 +336,323 +1297,434 +1033,534 +733,746 +1139,747 +622,547 +754,642 +1044,355 +711,532 +684,91 +212,219 +236,71 +1220,561 +735,56 +397,276 +918,331 +261,513 +105,543 +890,208 +875,698 +616,434 +672,364 +149,674 +21,462 +351,229 +1252,7 +892,333 +1251,457 +572,148 +343,885 +1260,767 +164,430 +922,427 +753,130 +1278,323 +1203,226 +723,574 +1049,596 +693,159 +187,306 +587,574 +1215,467 +360,801 +1213,130 +882,528 +1019,276 +1046,60 +1163,661 +242,609 +1302,205 +457,859 +1245,221 +1304,889 +721,372 +664,771 +219,698 +494,651 +589,57 +465,508 +927,795 +912,14 +505,348 +504,234 +1213,382 +462,639 +460,851 +545,674 +360,93 +77,746 +427,490 +1267,887 +134,541 +3,11 +1181,523 +581,630 +460,450 +248,285 +1116,627 +144,567 +21,541 +216,700 +1158,512 +124,829 +944,513 +574,652 +460,387 +199,163 +678,84 +72,829 +67,574 +135,738 +363,842 +519,514 +1005,33 +107,642 +507,339 +882,823 +1243,208 +940,682 +738,746 +961,661 +1129,723 +8,795 +590,555 +438,585 +870,35 +431,385 +1173,358 +277,534 +1212,700 +16,563 +174,382 +73,488 +239,232 +308,621 +102,243 +25,770 +736,893 +149,416 +1146,669 +646,820 +1243,574 +1123,588 +356,249 +392,107 +956,234 +527,330 +330,467 +947,842 +987,459 +664,599 +477,220 +1074,71 +648,453 +1029,337 +82,596 +828,514 +1131,213 +508,854 +848,639 +910,39 +346,63 +1000,194 +3,883 +1146,386 +8,596 +1304,5 +1129,815 +253,264 +759,665 +803,380 +684,697 +878,511 +761,543 +887,736 +513,833 +753,298 +149,266 +278,624 +654,673 +1047,801 +323,459 +341,64 +592,162 +460,15 +1171,588 +870,91 +828,140 +1258,540 +733,148 +388,355 +7,406 +622,541 +1051,494 +10,437 +1161,283 +1123,229 +100,752 +751,467 +284,193 +858,253 +117,333 +1158,437 +377,86 +127,703 +127,731 +10,273 +32,291 +828,380 +945,287 +199,283 +915,880 +43,7 +1222,397 +641,283 +714,439 +761,509 +305,681 +1118,178 +980,82 +1289,353 +97,764 +1240,113 +408,18 +1288,810 +795,588 +638,630 +448,473 +206,381 +177,674 +694,434 +92,878 +867,418 +646,295 +443,866 +902,893 +211,866 +30,408 +1064,820 +672,630 +187,229 +1220,337 +555,353 +305,33 +1303,635 +1042,700 +164,669 +1165,611 +6,889 +806,234 +944,381 +1118,255 +239,326 +725,394 +961,317 +395,763 +393,729 +1294,530 +797,681 +1203,668 +1091,698 +1084,375 +1302,596 +37,287 +149,628 +619,788 +1108,684 +223,681 +984,669 +987,134 +1171,431 +761,161 +902,746 +477,347 +1146,262 +257,618 +875,61 +350,84 +8,298 +1096,543 +192,66 +790,541 +1166,263 +1002,611 +1042,252 +102,691 +1123,431 +579,792 +1186,829 +823,760 +217,892 +688,771 +765,674 +2,691 +937,785 +211,418 +440,35 +836,376 +982,213 +562,128 +1094,700 +1258,585 +268,194 +377,584 +990,5 +915,131 +1213,512 +21,161 +556,194 +1049,829 +1192,187 +902,18 +257,276 +937,42 +513,61 +194,851 +1000,264 +67,270 +365,63 +358,710 +402,397 +124,417 +1237,264 +820,508 +542,127 +1033,808 +387,217 +683,380 +850,387 +818,262 +90,561 +264,60 +850,2 +677,353 +647,488 +1104,645 +761,385 +440,803 +1091,509 +937,852 +308,273 +1026,421 +202,641 +1260,127 +1079,606 +171,747 +853,404 +55,362 +790,353 +284,421 +1278,291 +323,211 +842,432 +577,148 +271,347 +964,831 +1094,428 +912,432 +1044,539 +803,9 +566,397 +1260,719 +400,418 +289,831 +1116,374 +758,299 +944,12 +1273,735 +1278,123 +267,229 +612,701 +708,802 +672,418 +267,677 +1161,546 +1016,877 +617,287 +1138,148 +659,760 +408,74 +626,803 +223,213 +545,892 +55,810 +918,563 +50,767 +947,529 +488,236 +460,520 +666,437 +1228,669 +1111,163 +803,555 +139,463 +10,9 +1042,194 +964,407 +172,435 +843,351 +388,539 +366,12 +154,74 +797,61 +505,674 +79,390 +525,859 +1230,746 +786,205 +132,822 +50,175 +974,323 +984,396 +848,252 +1304,441 +1250,691 +530,381 +552,651 +960,810 +1176,828 +965,751 +795,82 +202,458 +141,61 +351,665 +21,93 +1146,878 +16,630 +513,661 +900,876 +147,787 +604,879 +1116,491 +992,746 +1116,851 +276,787 +984,449 +733,235 +402,49 +227,703 +721,737 +883,191 +1231,504 +1282,803 +472,331 +445,340 +349,661 +972,416 +974,604 +192,642 +1278,347 +795,351 +833,347 +187,82 +1047,93 +1208,651 +452,884 +288,65 +32,795 +1034,614 +1064,466 +808,64 +465,250 +754,194 +902,690 +1091,385 +366,513 +855,778 +1021,63 +599,810 +964,273 +487,760 +587,624 +1133,674 +390,732 +599,362 +838,563 +882,814 +432,164 +912,462 +1026,212 +708,92 +520,380 +1260,787 +875,644 +189,149 +408,596 +726,113 +259,91 +1051,91 +259,168 + +fold along x=655 +fold along y=447 +fold along x=327 +fold along y=223 +fold along x=163 +fold along y=111 +fold along x=81 +fold along y=55 +fold along x=40 +fold along y=27 +fold along y=13 +fold along y=6 \ No newline at end of file diff --git a/day13/parseInstructions.ts b/day13/parseInstructions.ts new file mode 100644 index 0000000..299c0fb --- /dev/null +++ b/day13/parseInstructions.ts @@ -0,0 +1,29 @@ +export type Position = [x: number, y: number] +export type Fold = { x: number } | { y: number } +export const parseInstructions = ( + input: string[], +): { + coordinates: Position[] + folds: Fold[] +} => { + const coordinates: Position[] = [] + const folds: Fold[] = [] + for (const line of input.filter((s) => s.length > 0)) { + if (line.startsWith('fold along')) { + const res = /fold along (x|y)=([0-9]+)/.exec(line) + const amount = parseInt(res?.[2] ?? '', 10) + if (res?.[1] === 'x') { + folds.push({ x: amount }) + } else { + folds.push({ y: amount }) + } + } else { + const [x, y] = line.split(',').map((s) => parseInt(s, 10)) + coordinates.push([x, y]) + } + } + return { + coordinates, + folds, + } +} diff --git a/day13/render.ts b/day13/render.ts new file mode 100644 index 0000000..de1ad0c --- /dev/null +++ b/day13/render.ts @@ -0,0 +1,30 @@ +import { Position } from './parseInstructions' + +export const render = ( + { + coordinates, + maxX, + maxY, + }: { + coordinates: Position[] + maxX?: number + maxY?: number + }, + blank?: string, +): string => { + maxX = maxX ?? coordinates.reduce((maxX, [x]) => (x > maxX ? x : maxX), 0) + maxY = maxY ?? coordinates.reduce((maxY, [, y]) => (y > maxY ? y : maxY), 0) + const dots: string[][] = [] + for (let y = 0; y <= maxY; y++) { + dots[y] = [] + for (let x = 0; x <= maxX; x++) { + const dot = coordinates.find(([dotX, dotY]) => dotX === x && dotY === y) + if (dot === undefined) { + dots[y][x] = blank ?? '.' + } else { + dots[y][x] = '#' + } + } + } + return dots.map((s) => s.join('')).join('\n') +} diff --git a/day13/solution.spec.ts b/day13/solution.spec.ts new file mode 100644 index 0000000..c8b0a54 --- /dev/null +++ b/day13/solution.spec.ts @@ -0,0 +1,101 @@ +import { loader } from '../lib/loader' +import { fold, Sheet } from './fold' +import { parseInstructions } from './parseInstructions' +import { render } from './render' + +const example = [ + '6,10', + '0,14', + '9,10', + '0,3', + '10,4', + '4,11', + '6,0', + '6,12', + '4,1', + '0,13', + '10,12', + '3,4', + '3,0', + '8,4', + '1,10', + '2,14', + '8,10', + '9,0', + '', + 'fold along y=7', + 'fold along x=5', +] + +const input = parseInstructions(loader(13)('input')) + +describe('parseInstructions()', () => { + it('should parse instructions', () => { + const { coordinates, folds } = parseInstructions(example) + expect(coordinates).toHaveLength(18) + expect(coordinates).toContainEqual([10, 12]) + expect(folds).toEqual([{ y: 7 }, { x: 5 }]) + expect(render({ coordinates })).toEqual( + [ + '...#..#..#.', + '....#......', + '...........', + '#..........', + '...#....#.#', + '...........', + '...........', + '...........', + '...........', + '...........', + '.#....#.##.', + '....#......', + '......#...#', + '#..........', + '#.#........', + ].join('\n'), + ) + }) +}) + +describe('Day 13: Transparent Origami', () => { + describe('Part 1', () => { + it('should solve the example', () => { + const { coordinates, folds } = parseInstructions(example) + expect(coordinates).toHaveLength(18) + const folded1 = fold({ coordinates }, folds[0]) + expect(folded1.coordinates).toHaveLength(17) + expect(render(folded1)).toEqual( + [ + '#.##..#..#.', + '#...#......', + '......#...#', + '#...#......', + '.#.#..#.###', + '...........', + '...........', + ].join('\n'), + ) + const folded2 = fold(folded1, folds[1]) + expect(folded2.coordinates).toHaveLength(16) + expect(render(folded2)).toEqual( + ['#####', '#...#', '#...#', '#...#', '#####', '.....', '.....'].join( + '\n', + ), + ) + }) + it('should solve the puzzle', () => { + const folded = fold({ coordinates: input.coordinates }, input.folds[0]) + expect(folded.coordinates).toHaveLength(666) + }) + }) + describe('Part 2', () => { + it('should solve the puzzle', () => { + let folded: Sheet | undefined = undefined + for (const foldstep of input.folds) { + folded = fold(folded ?? { coordinates: input.coordinates }, foldstep) + } + console.log(render(folded as Sheet, ' ')) // CJHAZHKU + expect(folded?.coordinates).toHaveLength(97) + }) + }) +}) diff --git a/day14/countPairs.spec.ts b/day14/countPairs.spec.ts new file mode 100644 index 0000000..8598dd3 --- /dev/null +++ b/day14/countPairs.spec.ts @@ -0,0 +1,32 @@ +import { countPairs } from './countPairs' + +describe('countPairs()', () => { + it('should count pairs in a string', () => + expect(countPairs('NNCB').pairs).toEqual({ + NN: 1, + NC: 1, + CB: 1, + })) + it('should count pairs in a string', () => + expect(countPairs('NCNBCHB').pairs).toEqual({ + NC: 1, + CN: 1, + NB: 1, + BC: 1, + CH: 1, + HB: 1, + })) + it('should count elements from pairs', () => + expect(countPairs('NNCB').elements).toEqual({ + N: 2, + C: 1, + B: 1, + })) + it('should count elements from pairs', () => + expect(countPairs('NCNBCHB').elements).toEqual({ + N: 2, + C: 2, + B: 2, + H: 1, + })) +}) diff --git a/day14/countPairs.ts b/day14/countPairs.ts new file mode 100644 index 0000000..d2a86e7 --- /dev/null +++ b/day14/countPairs.ts @@ -0,0 +1,17 @@ +/** + * Turns a sequence into a count of pairs and elements + */ +export const countPairs = ( + sequence: string, +): { pairs: Record; elements: Record } => { + const pairCount: Record = {} + const elementCount: Record = {} + for (let i = 1; i < sequence.length; i++) { + const pair = `${sequence[i - 1]}${sequence[i]}` + pairCount[pair] = (pairCount[pair] ?? 0) + 1 + } + for (const element of sequence) { + elementCount[element] = (elementCount[element] ?? 0) + 1 + } + return { pairs: pairCount, elements: elementCount } +} diff --git a/day14/countingPairInsertion.spec.ts b/day14/countingPairInsertion.spec.ts new file mode 100644 index 0000000..8e46de5 --- /dev/null +++ b/day14/countingPairInsertion.spec.ts @@ -0,0 +1,36 @@ +import { countingPairInsertion } from './countingPairInsertion' +import { countPairs } from './countPairs' +import { parseRule } from './parseRule' + +describe('countingPairInsertion()', () => { + it('should insert a new pair', () => { + expect( + countingPairInsertion( + { + pairs: { + NN: 1, + }, + elements: { + N: 2, + }, + }, + [['NN', 'C']], + ), + ).toMatchObject({ + pairs: { + NC: 1, + CN: 1, + }, + }) + }) + it('should solve the example', () => { + const count = countPairs(`NNCB`) + expect(count.pairs).toEqual({ + NN: 1, + NC: 1, + CB: 1, + }) + const rules = ['NN -> C', 'NC -> B', 'CB -> H'].map(parseRule) + expect(countingPairInsertion(count, rules)).toEqual(countPairs('NCNBCHB')) + }) +}) diff --git a/day14/countingPairInsertion.ts b/day14/countingPairInsertion.ts new file mode 100644 index 0000000..d00dc3e --- /dev/null +++ b/day14/countingPairInsertion.ts @@ -0,0 +1,34 @@ +import { Rule } from './parseRule' + +/** + * This implementation tracks pairs and element count and does not rely on concatenating a long string. + */ +export const countingPairInsertion = ( + { + pairs, + elements, + }: { pairs: Record; elements: Record }, + rules: Rule[], +): { pairs: Record; elements: Record } => { + const newPairs = { ...pairs } + const newElements = { ...elements } + for (const [pair, insertion] of rules) { + const pairCount = pairs[pair] + // The rule applies to a pair which does not exist + if (pairCount === undefined) continue + // Increment the counts for the two new resulting pairs + const [left, right] = pair + const leftPair = `${left}${insertion}` + const rightPair = `${insertion}${right}` + newPairs[leftPair] = (newPairs[leftPair] ?? 0) + pairCount + newPairs[rightPair] = (newPairs[rightPair] ?? 0) + pairCount + + // Remove replaced pairs (pairs are "split" in a left and a right pair, therefore they dissapear) + newPairs[pair] = (newPairs[pair] ?? 0) - pairCount + if (newPairs[pair] === 0) delete newPairs[pair] + + // Increase the count for the inserted element + newElements[insertion] = (newElements[insertion] ?? 0) + pairCount + } + return { pairs: newPairs, elements: newElements } +} diff --git a/day14/pairInsertion.spec.ts b/day14/pairInsertion.spec.ts new file mode 100644 index 0000000..e2b3710 --- /dev/null +++ b/day14/pairInsertion.spec.ts @@ -0,0 +1,36 @@ +import { pairInsertion } from './pairInsertion' +import { parseRule } from './parseRule' + +const exampleRules = [ + 'CH -> B', + 'HH -> N', + 'CB -> H', + 'NH -> C', + 'HB -> C', + 'HC -> B', + 'HN -> C', + 'NN -> C', + 'BH -> H', + 'NC -> B', + 'NB -> B', + 'BN -> B', + 'BB -> N', + 'BC -> B', + 'CC -> N', + 'CN -> C', +].map(parseRule) + +const exampleTemplate = `NNCB` + +describe('pairInsertion()', () => { + let input = exampleTemplate + it.each([ + ['NCNBCHB'], + ['NBCCNBBBCBHCB'], + ['NBBBCNCCNBBNBNBBCHBHHBCHB'], + ['NBBNBNBBCCNBCNCCNBBNBBNBBBNBBNBBCBHCBHHNHCBBCBHCB'], + ])('should turn pair into %s', (expected) => { + input = pairInsertion(input, exampleRules) + return expect(input).toEqual(expected) + }) +}) diff --git a/day14/pairInsertion.ts b/day14/pairInsertion.ts new file mode 100644 index 0000000..37216df --- /dev/null +++ b/day14/pairInsertion.ts @@ -0,0 +1,21 @@ +import { Rule } from './parseRule' + +/** + * Naive implementation: + * go through the template string and insert the element between every matching pair. + * + * @deprecated Memory intensive. Use {@link countingPairInsertion}. + */ +export const pairInsertion = (template: string, rules: Rule[]): string => { + const result: string[] = [] + for (let i = 0; i < template.length; i++) { + const pair = `${template[i - 1] ?? ''}${template[i]}` + const matchingRule = rules.find(([rulePair]) => rulePair === pair) + if (matchingRule !== undefined) { + // Insert the element before the current half pair + result.push(matchingRule[1]) + } + result.push(template[i]) + } + return result.join('') +} diff --git a/day14/parseRule.ts b/day14/parseRule.ts new file mode 100644 index 0000000..3250c1d --- /dev/null +++ b/day14/parseRule.ts @@ -0,0 +1,6 @@ +export type Rule = [pair: string, insertion: string] + +export const parseRule = (rule: string): Rule => { + const [pair, , insertion] = rule.split(' ') + return [pair, insertion] +} diff --git a/day14/rules.txt b/day14/rules.txt new file mode 100644 index 0000000..7b4106e --- /dev/null +++ b/day14/rules.txt @@ -0,0 +1,100 @@ +SV -> C +SF -> P +BP -> V +HC -> B +PK -> B +NF -> C +SN -> N +PF -> S +ON -> S +FC -> C +PN -> P +SC -> B +KS -> V +OS -> S +NC -> C +VH -> N +OH -> C +BB -> H +KV -> V +HP -> S +CP -> H +SO -> F +KK -> N +OO -> C +SH -> O +PB -> S +KP -> H +OC -> K +BN -> F +HH -> S +CH -> B +PC -> V +SB -> N +KO -> H +BH -> B +SK -> K +KF -> S +NH -> O +HN -> V +VN -> F +BC -> V +VP -> C +KN -> H +PV -> S +HB -> V +VV -> O +PO -> B +FN -> H +PP -> B +BF -> S +CB -> S +NK -> F +NO -> B +CC -> S +OF -> C +HS -> H +SP -> C +VB -> V +BK -> S +CO -> O +NS -> K +PH -> O +BV -> B +CK -> F +VC -> S +HK -> B +BO -> K +HV -> F +KC -> V +CN -> H +FS -> V +VS -> N +CF -> K +VO -> F +FH -> H +NB -> N +PS -> P +OK -> N +CV -> O +CS -> K +HO -> C +KB -> P +NN -> V +KH -> C +OB -> V +BS -> O +FB -> H +FF -> K +HF -> P +FO -> F +VF -> F +OP -> S +VK -> K +OV -> N +FK -> H +FP -> H +NV -> H +NP -> N +SS -> C +FV -> N \ No newline at end of file diff --git a/day14/solution.spec.ts b/day14/solution.spec.ts new file mode 100644 index 0000000..a9e5e94 --- /dev/null +++ b/day14/solution.spec.ts @@ -0,0 +1,91 @@ +import { loader } from '../lib/loader' +import { countingPairInsertion } from './countingPairInsertion' +import { countPairs } from './countPairs' +import { pairInsertion } from './pairInsertion' +import { parseRule } from './parseRule' + +const exampleRules = [ + 'CH -> B', + 'HH -> N', + 'CB -> H', + 'NH -> C', + 'HB -> C', + 'HC -> B', + 'HN -> C', + 'NN -> C', + 'BH -> H', + 'NC -> B', + 'NB -> B', + 'BN -> B', + 'BB -> N', + 'BC -> B', + 'CC -> N', + 'CN -> C', +].map(parseRule) + +const exampleTemplate = `NNCB` + +const rules = loader(14)('rules').map(parseRule) +const template = `VNVVKSNNFPBBBVSCVBBC` + +describe('Day 14: Extended Polymerization', () => { + describe('Part 1', () => { + const countElements = (sequence: string): Record => + sequence.split('').reduce( + (count, el) => ({ + ...count, + [el]: (count?.[el] ?? 0) + 1, + }), + {} as Record, + ) + + it('should solve the example', () => { + let input = exampleTemplate + for (let step = 0; step < 10; step++) { + input = pairInsertion(input, exampleRules) + } + const count = countElements(input) + expect(count['B']).toEqual(1749) + expect(count['C']).toEqual(298) + expect(count['H']).toEqual(161) + expect(count['N']).toEqual(865) + }) + it('should solve the puzzle', () => { + let input = template + for (let step = 0; step < 10; step++) { + input = pairInsertion(input, rules) + } + const count = countElements(input) + const sorted = Object.entries(count).sort(([, c1], [, c2]) => c2 - c1) + expect(sorted[0][1] - sorted[sorted.length - 1][1]).toEqual(2621) + }) + }) + + /** + * Part 2 no longer works with the implementation from part 1, because of + * the exponential growth, so I switched to an implementation that keeps + * track of the number of pairs and elements instead. + */ + describe('Part 2', () => { + it('should solve the puzzle', () => { + let input = countPairs(exampleTemplate) + for (let step = 0; step < 10; step++) { + input = countingPairInsertion(input, exampleRules) + } + const count = input.elements + expect(count['B']).toEqual(1749) + expect(count['C']).toEqual(298) + expect(count['H']).toEqual(161) + expect(count['N']).toEqual(865) + }) + it('should solve the puzzle', () => { + let input = countPairs(template) + for (let step = 0; step < 40; step++) { + input = countingPairInsertion(input, rules) + } + const count = input.elements + const sorted = Object.entries(count).sort(([, c1], [, c2]) => c2 - c1) + expect(sorted[0][1] - sorted[sorted.length - 1][1]).toEqual(2843834241366) + }) + }) +}) diff --git a/day15/input.txt b/day15/input.txt new file mode 100644 index 0000000..4d9ce88 --- /dev/null +++ b/day15/input.txt @@ -0,0 +1,100 @@ +9288988799169797672494749255119669898996573999583986189239999598984799822348965745856766795499834649 +9336897879889887886178547878932383343897969375528317888596414912984889899896681582897852799987698919 +1897778869898975348195967299799218929299986987238888983439837668176288929486984281998883997689928399 +9929379596989975588919354989848824879259338981764649316939699414591798996277899778297863349896687529 +9299536973198975989668639599981992969988798261739729688719716614897359549861961677579672523167986511 +7987961623297525864967191899298165876452579892878669981979557529983329311935283984796198899331498766 +9933188395912993489929878928979164799949214314685899999949959978164816779811128692799288826655771954 +9879411158118811985997999759791869896995299827179998882766687888891885997982991692167933582892854156 +9998631525957988118287969721874572682352527971791899771898918585995689953667683999169491381879997972 +9148272678595823589879662996981998894898844679741994169298499959867934999532187299167299186241998292 +8967886285928969877498814378999894469497368728914983178727691699718399654813956289713487981828996297 +2999393515291995229979897899399596921679288483969795189979696985897255988985689416376934128997218299 +7817696897253996999651997969929981349899123948992659879897887667199775989882958778899293892998989276 +9638635592568249933748715589514111329963291898199473693991698996362848147964599284195681914957329467 +4958169729641951781983588759859969499895795879488199984497178298368899238979649719927899818641998489 +9975869369989998759115433978632495978793749977511549989984223394977735997142889411977899995898137993 +9459965977995489288474399895689998695961956993692699421769614323193479393955974793991182999979389958 +8994981918488815875941366194919798679996477924993929237972119998926286352895291999868513555622933869 +9978788955499954429538318136599937492729898626382799896379749839156697643991476929999443913972759281 +9789326441993961917529769129211514818927459529999665126819834992573899989577699452197919499789111899 +5645266999796592329963869997412285981628471859718122319982899417968932949924886989359739949384198886 +4151433899456957966682999728989743799492988668799291189825989779923276699886797988429994794438971668 +7192698711984233938996888119995889991972929159599994289919539966249787249972571194978959978992687611 +2188999661989826988581693997894588683797868679171937998388999529486952918189269993969428519963791967 +9861892485895498492212599425976855994975985912626678899459997129997798893717498885748998996987987997 +6362488549459179788479968499975364362547921271989899979997419937987319622952986237496986284699314297 +5497988785661358759985368549985499987879978818164923953194687168865459988799882727999431919418957792 +8921689612499495196716939839129969948877994484939159896618549595749671852996979999898289792879849397 +9117892818987897191767559599815947974867469568839917771471898394159117985171699936812298616598548579 +9499687172935737495154289999572674963694459699667979694997258367529924396919185817635144899393296999 +9359917393876189496794996228496429878984488199998998519969886192894999822998691883882855832938745789 +5991899864977697724629999715775227413957489939767875967492379866938689479737899737238139929793229691 +8773773941114912996998195388691327897589927937565864699875956954763217688963799581693978929456769918 +3789413727298922758699481168799996951192669889822813961131496997515599269239941498598558992664989219 +6593995867928869718437459956978746861975998936541855894996991791844649276462868699996942599192789759 +1993341135872935287172387257312453769899771419861468869997994169176169949614122255777814279818269918 +2969135998691189572857989199653891178966992543799975499874487811962496191967999489743499839598884687 +9787789572211797194337999256191563897691817781945298867986284396979988791729938633187393569589869918 +2299959163318689978729376684584292391777894958897598287996132978169997894991998998599977549738278923 +3691949798949888798168941149915567331911818129929718518938167387689939299824771197638987817379892989 +9749785619856999652449487875688981561193591826594362649994939666967979778512799696341955711919984978 +9881927664728581359934177289639895786194274231975664274195899997999687929598893691365837899273425129 +9919419886679822926611867726862553187195651759289168197679985899689947964717915885111276899888197966 +9231598837249477616689995515695824792669591942461898459897688991749911988958996929699359978565275725 +2892658244889159188897479599898949898749977971288388998787787997948558944985976998979898962172685897 +9979588759684339829796553677828895958589919229599989589392589747761568985977998861579949161187997233 +6287215915683729958932894699999247639399978989597899848299991995847221899992518166862818775179559971 +2799894917998999998874784789594789858417957771571473748859999329599135947687373576896989993589961874 +5921848262785779887771299979768834439798859747883569786946978457756498658975779671982998713657998999 +9997786782929186285839956198479977866697199917635186717999819821816856594838498858245992265954264934 +9954997215627599265929978387691134766992481123697456499693917895998289479717119612991968988158439691 +9916272332984989918199969936999599699155379896778714667674586619938853681649448451872845859999239829 +1256399471117548567985989955892899689887699697686297558119846998699918385686487875399995279928741588 +7177168446299683823212949816929791389289577545289534897191769788823948882469977935993994579671821187 +6979892421886929946739955799883719139893871273491387787287522865999759437718571283535249569138967648 +4145997935994642989996771886889569927531998999268917912388818819496782276477165999995719866649747764 +8898899748735667899752999477989593963868993879144929617748885292969974337666618879885768988931287698 +9196988991448764896467189989479747838137156849499359959399476958168494834619648549898691614999879739 +7925876418947885867316298842933587498796372993949569174199698294898468184868798782855986566997769253 +5999995536941691894699798926989158981998299942565537791869569799989677238748115794415979948626971297 +8896561829785751826769983485679999991699195576827934937515391627992938198466316849988998981931463975 +1678992985845917991999559999398498659179639589116974399879277638914599511895856993791955948698936769 +8723555973519986597726497991769996916871959668366828894199899193915299198488937535299891992439299937 +9859879779999559469859989149991235571476226458448738485449684831869569129983688918615773979995919197 +1762274915495299837161988958831218291579987895596819387889529513259546684889197517888399895193724779 +2329987489878172595959982221592989791917892847896794565689456987698924854979316862189958639879898937 +7711657684176742515913464892986549152966165389597999969269518687598991498112999894982942789276718458 +9989179928937989827799268436844255995598521878597942899959459198973751659286887993912795839916999399 +4567145965886799947748995493953341996258925919999689739976496999948828257798971787719678969851996746 +8553979659889688912787934849749991288998219549994188353936124999195218388671689915579964878413489665 +2458758981536446277157958999192653841815897922998795986691787998661699134582798739519913786926595735 +9233467899499484399916213919898118589935927969443759859978699389889676999696349897998592979919998299 +1621957847935871765819681398937934599688352958522142283796985527189865829779968678199997198567691768 +9673864188986737727887346587481936992239789665514689835781751549838861996989972756948968698623688959 +7897146188799288444495998299966977488868899799997994924917119827858775911816351681497482299111997691 +2568718799789199779398689847783149889479969577949265239141878557193889688765334449955197999914987965 +6939937695943799169928279532995937199758313658599658967819433777451979789913959439926566929189199369 +5999854888947964889779299422517269958222959149218639862111399697889988998988495479874922759149779792 +8898165192853343774932725119999895929144898798828668998787399878577998661677495889352267795135479958 +9578193578475986498984689899679398178897882619949696877398898259198963869894573999782235189917995779 +9614779614699666248931887454849181959988389121797844916823925964183788999781794279997178499292189339 +7154633697899892718176319474169673818225779991699839667193959375999134917851861694489619849782799983 +7616913966129714997489291681867995117771128927779449285994725191838843376673798698999374745869928979 +9818776583846956356779687821191959633714565781299649977899949519971939492224983479969178589787741359 +8699924979993138798977989952516599159628999129974189852977567885894191476728992769469629699859245899 +9913371369899982359888716676984987479626245958159698436779975279878971677837387679871384371297934939 +8599771948779192996924339399766946995298899149959179412988741928283199591227819893228869673194965697 +8489944889371697897296993939299713849254969988799792753882795824818789664812129936966999988791751921 +6976789988678861958199499445892799332971227632999989936177688529771589699899882978971429758899779998 +5968497692829128995138725999979828117911719698428448259968286871278658929934846599584982263818912698 +8958452959267676424741399686862372997728797445179742993896977988979989612483887199299999714618977759 +4999382992857889814779859518559958458978116999689569869899929626199925858874989715889286699966189192 +6821852498859387994787881789359711946699741427195989164226682888818389599911297889796498646148759263 +9985999614831878291177496865999896852915236956397629682728379999748678194954611317891917837599992421 +1898728946843198193289979889889991686685685399948883227849222754865945897392179762979369894261974859 +8239479653435399988579899419849928235496516187895769626582993984392699899597869988769889562986328589 +2749999498518999696779743457991992199779379529978126229362411788511691877869319879963998164177714684 +5499969865189779991198556392918514799593899919672411987351966179399942999818128941959596331883477879 +4719866799939881495699681785999974276299998443822677143998839821795639964258984499989679929197977689 +6994796719999998996693827884457853594797687747694968116959893999957898943799975585881539179956768118 \ No newline at end of file diff --git a/day15/navigateCave.ts b/day15/navigateCave.ts new file mode 100644 index 0000000..f4a5df7 --- /dev/null +++ b/day15/navigateCave.ts @@ -0,0 +1,64 @@ +/** + * Implements Dijkstra's algorithm to search cave + * + * @see https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm + */ +const navigateCave = ( + cave: number[][], + onEnd: (distance: number) => void, +): void => { + const unvisited: boolean[][] = [] + const distance: number[][] = [] + for (let y = 0; y < cave.length; y++) { + unvisited[y] = [] + distance[y] = [] + for (let x = 0; x < cave[y].length; x++) { + unvisited[y][x] = true + distance[y][x] = Number.MAX_SAFE_INTEGER + } + } + distance[0][0] = 0 + + const queue: [x: number, y: number, prio: number][] = [[0, 0, 0]] + let current: [x: number, y: number, prio: number] | undefined = undefined + while ( + (current = queue.sort(([, , prio0], [, , prio1]) => prio1 - prio0).pop()) + ) { + const [x, y] = current + const currentDistance = distance[y][x] + + const neighbors = [ + // up + [y - 1, x], + // down + [y + 1, x], + // right + [y, x - 1], + // left + [y, x + 1], + ] + for (const [nY, nX] of neighbors) { + if (cave[nY]?.[nX] !== undefined && unvisited[nY][nX]) { + const nDistance = cave[nY][nX] + currentDistance + if (nDistance < distance[nY][nX]) { + distance[nY][nX] = nDistance + // Add to queue, if a better distance was found + queue.push([nX, nY, nDistance]) + } + } + } + unvisited[y][x] = false + + if (y === cave.length - 1 && x === cave[y].length - 1) { + onEnd(currentDistance) + } + } +} + +export const lowestRisk = (cave: number[][]): number => { + let lowestRisk = Number.MAX_SAFE_INTEGER + navigateCave(cave, (distance) => { + lowestRisk = distance + }) + return lowestRisk +} diff --git a/day15/part2.ts b/day15/part2.ts new file mode 100644 index 0000000..d701496 --- /dev/null +++ b/day15/part2.ts @@ -0,0 +1,7 @@ +import { loader } from '../lib/loader.js' +import { lowestRisk } from './navigateCave.js' +import { toMap } from './toMap.js' +import { wrap } from './wrap.js' + +const input = toMap(loader(15)('input')) +console.log(lowestRisk(wrap(input))) // 3045 diff --git a/day15/solution.spec.ts b/day15/solution.spec.ts new file mode 100644 index 0000000..3c60839 --- /dev/null +++ b/day15/solution.spec.ts @@ -0,0 +1,33 @@ +import { loader } from '../lib/loader' +import { lowestRisk } from './navigateCave' +import { toMap } from './toMap' +import { wrap } from './wrap' + +const example = toMap([ + '1163751742', + '1381373672', + '2136511328', + '3694931569', + '7463417111', + '1319128137', + '1359912421', + '3125421639', + '1293138521', + '2311944581', +]) + +const input = toMap(loader(15)('input')) + +describe('Day 15: Chiton', () => { + describe('Part 1', () => { + it('should solve the example', () => + expect(lowestRisk(example)).toEqual(40)) + it('should solve the puzzle', () => expect(lowestRisk(input)).toEqual(748)) + }) + describe('Part 2', () => { + it('should solve the example', () => + expect(lowestRisk(wrap(example))).toEqual(315)) + it('should solve the puzzle', () => + expect(lowestRisk(wrap(input))).toEqual(3045)) + }) +}) diff --git a/day15/toMap.ts b/day15/toMap.ts new file mode 100644 index 0000000..5e31101 --- /dev/null +++ b/day15/toMap.ts @@ -0,0 +1,2 @@ +export const toMap = (map: string[]): number[][] => + map.map((s) => s.split('').map((s) => parseInt(s, 10))) diff --git a/day15/wrap.spec.ts b/day15/wrap.spec.ts new file mode 100644 index 0000000..e7bcec6 --- /dev/null +++ b/day15/wrap.spec.ts @@ -0,0 +1,21 @@ +import { loader } from '../lib/loader' +import { toMap } from './toMap' +import { wrap } from './wrap' + +const example = toMap([ + '1163751742', + '1381373672', + '2136511328', + '3694931569', + '7463417111', + '1319128137', + '1359912421', + '3125421639', + '1293138521', + '2311944581', +]) + +describe('wrap()', () => { + it('should wrap the map', () => + expect(wrap(example)).toEqual(toMap(loader(15)('wrappedExample')))) +}) diff --git a/day15/wrap.ts b/day15/wrap.ts new file mode 100644 index 0000000..ba73e7f --- /dev/null +++ b/day15/wrap.ts @@ -0,0 +1,18 @@ +export const wrap = (map: number[][], wrap = 5): number[][] => { + const wrapped: number[][] = [] + for (let wrapY = 0; wrapY < wrap; wrapY++) { + for (let y = 0; y < map.length; y++) { + const yOffset = y + wrapY * map.length + for (let wrapX = 0; wrapX < wrap; wrapX++) { + for (let x = 0; x < map[y].length; x++) { + const xOffset = x + wrapX * map[y].length + let v = map[y][x] + wrapY + wrapX + if (v > 9) v = v - 9 + if (wrapped[yOffset] === undefined) wrapped[yOffset] = [] + wrapped[yOffset][xOffset] = v + } + } + } + } + return wrapped +} diff --git a/day15/wrappedExample.txt b/day15/wrappedExample.txt new file mode 100644 index 0000000..441a362 --- /dev/null +++ b/day15/wrappedExample.txt @@ -0,0 +1,50 @@ +11637517422274862853338597396444961841755517295286 +13813736722492484783351359589446246169155735727126 +21365113283247622439435873354154698446526571955763 +36949315694715142671582625378269373648937148475914 +74634171118574528222968563933317967414442817852555 +13191281372421239248353234135946434524615754563572 +13599124212461123532357223464346833457545794456865 +31254216394236532741534764385264587549637569865174 +12931385212314249632342535174345364628545647573965 +23119445813422155692453326671356443778246755488935 +22748628533385973964449618417555172952866628316397 +24924847833513595894462461691557357271266846838237 +32476224394358733541546984465265719557637682166874 +47151426715826253782693736489371484759148259586125 +85745282229685639333179674144428178525553928963666 +24212392483532341359464345246157545635726865674683 +24611235323572234643468334575457944568656815567976 +42365327415347643852645875496375698651748671976285 +23142496323425351743453646285456475739656758684176 +34221556924533266713564437782467554889357866599146 +33859739644496184175551729528666283163977739427418 +35135958944624616915573572712668468382377957949348 +43587335415469844652657195576376821668748793277985 +58262537826937364893714847591482595861259361697236 +96856393331796741444281785255539289636664139174777 +35323413594643452461575456357268656746837976785794 +35722346434683345754579445686568155679767926678187 +53476438526458754963756986517486719762859782187396 +34253517434536462854564757396567586841767869795287 +45332667135644377824675548893578665991468977611257 +44961841755517295286662831639777394274188841538529 +46246169155735727126684683823779579493488168151459 +54698446526571955763768216687487932779859814388196 +69373648937148475914825958612593616972361472718347 +17967414442817852555392896366641391747775241285888 +46434524615754563572686567468379767857948187896815 +46833457545794456865681556797679266781878137789298 +64587549637569865174867197628597821873961893298417 +45364628545647573965675868417678697952878971816398 +56443778246755488935786659914689776112579188722368 +55172952866628316397773942741888415385299952649631 +57357271266846838237795794934881681514599279262561 +65719557637682166874879327798598143881961925499217 +71484759148259586125936169723614727183472583829458 +28178525553928963666413917477752412858886352396999 +57545635726865674683797678579481878968159298917926 +57944568656815567976792667818781377892989248891319 +75698651748671976285978218739618932984172914319528 +56475739656758684176786979528789718163989182927419 +67554889357866599146897761125791887223681299833479 \ No newline at end of file diff --git a/day16/solution.spec.ts b/day16/solution.spec.ts new file mode 100644 index 0000000..9a8396c --- /dev/null +++ b/day16/solution.spec.ts @@ -0,0 +1,156 @@ +const parseHex = (hex: string): string => + parseInt(hex, 16) + .toString(2) + .padStart(hex.length * 4, '0') + +describe('parseHex()', () => { + it.each([['D2FE28', '110100101111111000101000']])( + 'should convert hex %s to binary %s', + (hex, bin) => expect(parseHex(hex)).toEqual(bin), + ) +}) + +const toNumber = (bits: string): number => parseInt(bits, 2) + +const chunk = (bits: string, length: number): string[] => { + const chunks: string[] = [] + for (let i = 0; i < bits.length; i += length) { + chunks.push(bits.slice(i, i + length)) + } + return chunks +} + +enum Type { + Literal = 4, + Operator = 9, +} + +const vt = (binary: string) => ({ + version: toNumber(binary.slice(0, 3)), + typeId: toNumber(binary.slice(3, 6)), +}) + +const parseTransmission = (binary: string, packets: any[] = [], pos = 0) => { + const parseVersion = () => { + const version = toNumber(binary.slice(pos, pos + 3)) + if (isNaN(version) || version === 0) return + pos += 3 + return version + } + + const parseTypeId = () => { + const typeId = toNumber(binary.slice(pos, pos + 3)) + if (isNaN(typeId) || typeId === 0) return + pos += 3 + return typeId + } + + const parseLiteral = () => { + let isLast = false + const literalBits = [] + do { + isLast = binary.slice(pos, pos + 1) === '0' + literalBits.push(binary.slice(pos + 1, pos + 5)) + pos = pos + 5 + } while (!isLast) + const literal = toNumber(literalBits.join('')) + return literal + } + + const parseLengthTypeId = () => { + const lengthTypeId = parseInt(binary.slice(pos, pos + 1)) + pos++ + return lengthTypeId + } + + const parseSubPacketLength = () => { + const subPacketLength = toNumber(binary.slice(pos, pos + 15)) + pos += 15 + return subPacketLength + } + + const parseSubPacketNumber = () => { + const subPacketNumber = toNumber(binary.slice(pos, pos + 11)) + pos += 11 + return subPacketNumber + } + + const parseSubPacketsByLength = (len: number) => { + const subPacket = binary.slice(pos, pos + len) + pos += len + return parseTransmission(subPacket, packets, 0) + } + + while (pos < binary.length) { + const version = parseVersion() + if (version === undefined) return pos + const typeId = parseTypeId() + if (typeId === undefined) return pos + // console.log({ version, typeId }) + if (typeId === 4) { + // Literal + packets.push({ literal: parseLiteral(), version, typeId }) + } else { + packets.push({ version, typeId }) + // Other types are operator packages + const lengthTypeId = parseLengthTypeId() + if (lengthTypeId === 0) { + // 15-bit number representing the number of bits in the sub-packets + const subPacketLength = parseSubPacketLength() + parseSubPacketsByLength(subPacketLength) + } else { + // length is a 11-bit number representing the number of sub-packets. + const subPacketNumber = parseSubPacketNumber() + for (let p = 0; p < subPacketNumber; p++) { + pos = parseTransmission(binary, packets, pos) + } + } + } + } + return pos +} + +describe('parseTransmission()', () => { + it('should parse a literal', () => { + const result: any[] = [] + parseTransmission(parseHex('D2FE28'), result) + expect(result).toMatchObject([{ literal: 2021 }]) + }) + it('should parse operations', () => { + const result: any[] = [] + parseTransmission(parseHex('38006F45291200'), result) + expect(result).toMatchObject([ + { version: 1, typeId: 6 }, + { literal: 10 }, + { literal: 20 }, + ]) + }) + it('should parse operations', () => { + const result: any[] = [] + parseTransmission(parseHex('EE00D40C823060'), result) + expect(result).toMatchObject([ + { version: 7, typeId: 3 }, + { literal: 1 }, + { literal: 2 }, + { literal: 3 }, + ]) + }) +}) + +describe('Day 16: Packet Decoder', () => { + describe('Part 1', () => { + it.skip.each([ + ['8A004A801A8002F478', 16], + //['620080001611562C8802118E34', 12], + //['C0015000016115A2E0802F182340', 23], + //['A0016C880162017C3686B18A3D4780', 31], + ])('should solve the example', (hex, versionSum) => { + const result: any[] = [] + parseTransmission(parseHex(hex), result) + console.log(result) + expect(result.reduce((sum, { version }) => sum + version, 0)).toEqual( + versionSum, + ) + }) + }) +}) diff --git a/day17/game.ts b/day17/game.ts new file mode 100644 index 0000000..f254238 --- /dev/null +++ b/day17/game.ts @@ -0,0 +1,85 @@ +import { Point, probeLauncher, Target } from './probeLauncher.js' + +let trajectory: Point = { x: 18, y: 1 } +const target: Target = { from: { x: 20, y: -10 }, to: { x: 30, y: -5 } } + +const render = () => { + process.stdout.write('\u001b[2J') // Clear screen + const { points, hit, highestY } = probeLauncher(target, trajectory) + const pointsYSorted = points.sort(({ y: y1 }, { y: y2 }) => y2 - y1) + const pointsMinY = pointsYSorted[0].y + const pointsMaxY = pointsYSorted[pointsYSorted.length - 1].y + const deltaY = pointsMaxY < 0 ? pointsMinY : pointsMaxY + + const pointsXSorted = points.sort(({ x: x1 }, { x: x2 }) => x2 - x1) + const pointsMinX = pointsXSorted[0].x + const pointsMaxX = pointsXSorted[pointsXSorted.length - 1].x + const deltaX = pointsMaxX < 0 ? pointsMinX : pointsMaxX + + const shifted = points.map((point) => ({ + ...point, + y: -point.y + deltaY, + x: point.x + deltaX, + })) + + const maxX = shifted.sort(({ x: x1 }, { x: x2 }) => x2 - x1)[0].x + const maxY = shifted.sort(({ y: y1 }, { y: y2 }) => y2 - y1)[0].y + const map: string[][] = [] + for (let y = 0; y <= maxY; y++) { + map[y] = [] + for (let x = 0; x <= maxX; x++) { + map[y][x] = ' ' + } + } + for (const { x, y, icon } of shifted) { + map[y][x] = icon + } + + console.log(map.map((s) => s.join('')).join('\n')) + console.log({ trajectory, hit, highestY }) +} + +render() + +const stdin = process.stdin + +// without this, we would only get streams once enter is pressed +stdin.setRawMode(true) + +// resume stdin in the parent process (node app won't quit all by itself +// unless an error or process.exit() happens) +stdin.resume() + +// i don't want binary, do you? +stdin.setEncoding('utf8') + +// on any data into stdin +stdin.on('data', (key) => { + // ctrl-c ( end of text ) + if (key.toString() === '\u0003') { + process.exit() + } + switch (key.toString()) { + case '\u0003': + process.exit() + break + case '\u001b[A': + trajectory = { ...trajectory, y: trajectory.y + 1 } + render() + break + case '\u001b[B': + trajectory = { ...trajectory, y: trajectory.y - 1 } + render() + break + case '\u001b[D': + trajectory = { ...trajectory, x: trajectory.x - 1 } + render() + break + case '\u001b[C': + trajectory = { ...trajectory, x: trajectory.x + 1 } + render() + break + } +}) + +render() diff --git a/day17/probeLauncher.ts b/day17/probeLauncher.ts new file mode 100644 index 0000000..35dff98 --- /dev/null +++ b/day17/probeLauncher.ts @@ -0,0 +1,76 @@ +export type Point = { x: number; y: number } +export type Target = { from: Point; to: Point } +export type Element = Point & { icon: 'S' | 'T' | '#' | 'X' } + +export const probeLauncher = ( + targetArea: Target, + trajectory: Point, +): { hit: boolean; points: Element[]; highestY: number } => { + const points: Element[] = [ + { x: 0, y: 0, icon: 'S' }, // ship + ] + + // Add target area + const targetStartY = Math.min(targetArea.from.y, targetArea.to.y) + const targetEndY = Math.max(targetArea.from.y, targetArea.to.y) + + const targetStartX = Math.min(targetArea.from.x, targetArea.to.x) + const targetEndX = Math.max(targetArea.from.x, targetArea.to.x) + + // Add probe proints + // The probe's x,y position starts at 0,0. Then, it will follow some trajectory by moving in steps. On each step, these changes occur in the following order: + // - The probe's x position increases by its x velocity. + // - The probe's y position increases by its y velocity. + // - Due to drag, the probe's x velocity changes by 1 toward the value 0; that is, it decreases by 1 if it is greater than 0, increases by 1 if it is less than 0, or does not change if it is already 0. + // - Due to gravity, the probe's y velocity decreases by 1. + const probePoints: Point[] = [] + let probeXVelocity = trajectory.x + let probeYVelocity = trajectory.y + let probeX = 0 + let probeY = 0 + let hit = false + let highestY = 0 + do { + probeX += probeXVelocity + probeY += probeYVelocity + if (probeXVelocity > 0) probeXVelocity-- + if (probeXVelocity < 0) probeXVelocity++ + probeYVelocity-- + probePoints.push({ + x: probeX, + y: probeY, + }) + if (!hit) { + if ( + probeX >= targetStartX && + probeX <= targetEndX && + probeY >= targetStartY && + probeY <= targetEndY + ) + hit = true + } + if (probeY > highestY) highestY = probeY + } while (targetStartY < probeY) + + // Add elements for target + for (let y = targetStartY; y <= targetEndY; y++) { + for (let x = targetStartX; x <= targetEndX; x++) { + points.push({ + x, + y, + icon: hit ? 'X' : 'T', + }) + } + } + + // Add elements for probe + points.push( + ...probePoints.map((point) => ({ ...point, icon: '#' } as Element)), + ) + + return { + points, + hit, + highestY, + } +} diff --git a/day17/solution.spec.ts b/day17/solution.spec.ts new file mode 100644 index 0000000..75f4df0 --- /dev/null +++ b/day17/solution.spec.ts @@ -0,0 +1,24 @@ +import { trickShot } from './trickShot' + +describe('Day 17: Trick Shot', () => { + describe('Part 1', () => { + it('should solve the puzzle', () => { + expect( + trickShot({ + from: { x: 138, y: -125 }, + to: { x: 184, y: -71 }, + }).highestY, + ).toEqual(7750) + }) + }) + describe('Part 2', () => { + it('should solve the puzzle', () => { + expect( + trickShot({ + from: { x: 138, y: -125 }, + to: { x: 184, y: -71 }, + }).hittingVelocities.length, + ).toEqual(4120) + }) + }) +}) diff --git a/day17/trickShot.ts b/day17/trickShot.ts new file mode 100644 index 0000000..1047680 --- /dev/null +++ b/day17/trickShot.ts @@ -0,0 +1,86 @@ +import { Point, Target } from './probeLauncher' + +const shootAt = (targetArea: Target) => { + const targetStartY = Math.min(targetArea.from.y, targetArea.to.y) + const targetEndY = Math.max(targetArea.from.y, targetArea.to.y) + + const targetStartX = Math.min(targetArea.from.x, targetArea.to.x) + const targetEndX = Math.max(targetArea.from.x, targetArea.to.x) + + return ( + trajectory: Point, + ): { + hit: boolean + highestY: number + } => { + let hitOrMiss = false + let highestY = 0 + let yPos = 0 + let probeX = 0 + let probeY = 0 + let probeXVelocity = trajectory.x + let probeYVelocity = trajectory.y + while (!hitOrMiss) { + probeX += probeXVelocity + probeY += probeYVelocity + if (probeY > yPos) yPos = probeY + if (probeXVelocity > 0) probeXVelocity -= 1 + if (probeXVelocity < 0) probeXVelocity += 1 + probeYVelocity -= 1 + if ( + probeX >= targetStartX && + probeX <= targetEndX && + probeY >= targetStartY && + probeY <= targetEndY + ) { + hitOrMiss = true + if (yPos > highestY) highestY = yPos + return { + hit: true, + highestY, + } + } else if (probeX > targetEndX || probeY < targetStartY) { + hitOrMiss = true + return { + hit: false, + highestY, + } + } + } + return { + hit: false, + highestY, + } + } +} + +/** + * Brute-force all velocities with an upper limit + */ +export const trickShot = ({ + from, + to, +}: { + from: Point + to: Point +}): { + highestY: number + hittingVelocities: Point[] +} => { + const aim = shootAt({ from, to }) + let highestY = 0 + const hittingVelocities: Point[] = [] + for (let x = 1; x < 1000; x++) { + for (let y = -1000; y < 1000; y++) { + const { hit, highestY: maxY } = aim({ x, y }) + if (maxY > highestY) highestY = maxY + if (hit) { + hittingVelocities.push({ x, y }) + } + } + } + return { + hittingVelocities, + highestY, + } +} diff --git a/input/day01.txt b/input/day01.txt deleted file mode 100644 index fde3364..0000000 --- a/input/day01.txt +++ /dev/null @@ -1,1000 +0,0 @@ -threerznlrhtkjp23mtflmbrzq395three -9sevenvlttm -3twochzbv -mdxdlh5six5nqfld9bqzxdqxfour -422268 -vdctljvnj2jpgdfnbpfjv1 -tshl7foureightvzvzdcgt -1fourrj -6mfbqtzbprqfive -4sevens34 -fourfourpsckl47xdbncvndrthree -7ltsp1seventhreesix -8sixnmm85 -11three -fourvninelccgtkjzhhdqjmnxjbbkdsnine6two -three8seven -oneonefour7193eight -8jmqfhmzf7 -5nine8 -eight1qlfzvdtseven1threefour -5slbnsevenmz -8sixnzfctpblt -xthzlbsjvz4dlg9fiveseven7seven -fzqeightwothree1qhjtmfdsmsf -74ninesixfivermkvh -five7xshrvvxbjtwo -22threepdtqbceightninesevenvrsct -4ttbxqm76fiveqcpdptn2 -five3nrftzlzrqpkrxgtwoqplpgf -threethreeptz4 -755hhmsrseven -sevenone1 -two7bsnxknseven -threezdbbhkrnrq4seven -eighttwosix71xb -fourtwo86one4 -nxsvfqlpbtmjnjn9zkvhdn2zpn -37five4mrkcjgtpldsixtwo -cjbhbxx7v -911lvreightfour -6qptwo36onefour -fscrbckvp8threemrjmgvcfknfourseven8 -four48718hfour -kbzfourdfxdjmmn9onefourhcxbgnlthree -ktvnxthree6pltdv8hqhkcmcnfj -9qgnmdf -ninefive2 -twobrcdbnninefour85 -4qsst9pnvtxfcrpbgt4 -65cdxrjxqhbr86fourvvjvsdgl3 -mpfsmd7five -2krzxbvdgmfourthreeseven6onesevensix -eightone16 -zcslhb6hfsixnine -four44mrtqqsixtwo -two9gqfsk2six1 -1zrkpqvtfhm3five4 -375threethree -dmnjsjbqcvvqqseven3twoonesixcrdjglhdl -kpkhplpf8seven -zhk9ninesixbsfrg -34four -sevenseven8 -tlppzmxvgjnine9sixtxkpdone -drrzvjcgdxqmtmxffrftkthhfbqrpxmfiveseven32 -eight4mscvrpr7 -sixqmndjctlnxs9q1three -41mfqk81eight55 -jhmhqzcsxfsdxkx5oneseventhree2z1 -6three6k -6nine887 -hdrtcqn7zrsnrsbpxgbbsjzd -hxdvfnxd1sevensixthree1eight8six -eightn2 -sevenqlcf2fiveseven6266 -ttwone4vgtsrcds -four36 -52zlhmm22seven -lpblvxfivethreebfslbtfour6eightone4 -4cbr15two3 -4bvxjzhbdvmjgxlqhk5cxklkx5 -d392qsfpkbvhlz1jkcfkcjnsdvdknqbd -zffmdgmqzzsmzdqbhgjt8hhxzqvgflff22cfrnnq -555onebpttwothreessdtlhkzfk -7jsvkktn -pxslsbnlhj6fivesqdf3nhkmzzgdkckfsbxvgh -snjqcmpqf1threevxj -5jkcvtsgtwo49 -blbsmtgjhthree9glgchhmrlnrvcvf -jpdvqhxrrdonebmgdbpkcj8sixfourrkrllrcv -6five3smn3nine -kptrrdzxcninesevenfiveeight458 -fourfour171twobfqcvdpx6one -pqrzsmqls294 -bx7 -8eightthree71fourtksmgxcz2 -eighttwosix8mtpv -8ninedrjxsbvhrsqvdpbrl97tdkxdjmq9six -59twonine7ninenineninehsbqqzlr -five11 -6cmxnnmzmsk4lqclspone -grzqrbgtb2hztgffpzqflsqhzzdlzmktqbnjone -mrmvfive37two -three5ccvghbkp3mjrsfkbpn -three94oneonethree -mhoneightfivemdggmcjqgv7tlqkmhhxrjh -twodfbnnsfgnjc7fivetwo -sevensix8vfvkrxninedlxdjjmlvp -258 -phl9nine2fivefivenzzdckxdgpzrzqbkx -sfmfive46one -fourtwo6zjtjmtdkfzmltxdhltdzrtqp -429 -one3bzzthqjgl1skhmqvrtffpzqch -one7118 -fourninefivexzsgonefrmxpjx9svccseven -vqs3fourninenine -scchxmzbhqptt5 -seven3threetwo3 -gqdbqxbctkdbxf9zonevk6 -one5dxhfrsrsz7fivesevenseven -51m -twoninedfdshzcqrgvrkdrjmlqvqjhsmxlmfrhcdtbc713 -twofivethree9bccssbgqnthreethree -three76hpkzttdhgj -7dsseven1six9lggkdzrmjtwo -dpxg7threexfvxjsqzx -9191eightninekfcspxskthreethree -seven5five9hrvznqxn9qtqxghtgp9 -gm8threefiverpbqkf5 -8three3eightdgn -27nineeightninej -43fiveprxftkhpszrgsevenninebncn -threeone7drmqtjnine2ninerjbrhtbzfkone -zcplmpnbm3 -gllplmbp57one8fxpqbhgbln -xlxfkgjvnnpbvcclcf18oneseight6 -51pvmcdzbnxtsevenqrvmmfhchthree -nine6fdzrjone -77sixbvlsfninegjq -7hstqmscrqseven95ninerqjb -fourthree8jfnqbbztqsevennbllxgflc5 -four2threedrdqcqsbrnsix -one5onedplktrfb3mphprnfbcnineeighttlb -8five1mscqbplsltllmqjkkcfzkh9 -73nine -one98hmlkqlnbrnbzxjd -three8onesixmckhzrlbssxhoneonexftkn -6pthmtsixeightnine8one -h516nine16 -six83zsqd4lxqzqgcpd7twonehlj -threeseven4five35eightwont -sevenfour3 -275779 -pftjgl25 -eight5oneights -oneeighteight8nsnzphnmspkjxzdxhvhkgrl -9ninekzhkh2lfdseventwo -6two81fivethree -sixblhfvjfnm1mfmnpvqqnqshthreepjlzvfour9 -45spmbfdgdhljpdoneqclcqzccjndhqkthree6 -34jhrxkrtxf -83mgdntfnhdj -sixdtzllvpkppvlxhpkfive8sevenmdzpbnlcnfpcltg3 -8krd -threeqxcx8 -mtrssgmf85onesevenbtpmvptmjk5 -cgjlmfljxm98three4 -threehggmbtmzjceight11 -mxhhvvptm95two -8oneqcht3 -zjbfive6vvrr -1mbxsvmlveight7six645crtjb -6vptgkghfgzfourrsleightfive2five -onejcqbtfivesixeighttwo8 -2eight2kqmmbsbjvxtvjhponesixtwonesn -8pqeight -38mfhtq95ntvbmpthreexxg -six2zhzb4dhf7threeseven -jskqfbsct51seven8fourn -jmlgbbsqtwosklzkz6five -spngmplhchpqtfcksix1 -fiveqvsjlmlqmjzzhktkstwoeight3five -threenbf6zhtwo95nine -9ltqfqqxdlv -two6threeseven -xbgzgqfvgone4fs -fourfivedljcgdjrjzqmjbqqrctdvdnbjszszgpfour1 -82foureighteightqfmxfkvvmr -991pfoursjb -deightwo7sixbtxpv5qjfhkh3 -482nineznmhcqhmrmbxztgkdfour9five -four9threefiveeight2eightgcm -738 -6tfive9sixtwofour -two9fourone8 -5gfnine996zgsnvjn -8hpgkrndtfourtwofive -sbvxxctttjmkchhlbnine8seven -l9 -hm6xdmone5jzhppnlcs -five664 -gxthreemvrm5nine -tjknbthreegjs8ckrrqmffhfour7 -two5bbcszdzvtpprsgkmteightfive -plbtlpktcslgggpznine8sevenonejmsvg1 -87two85seven -5fxdb5sevenseven9 -zgpbndt6one -7239pztpqfkf -768threetwocfzcvc4sx -pbvc34sevenone47 -68nine -kqfxgjpnttwo84one -eighttxk2psqlfzf -sevenshrqgptpfj88fhxgmkkz -7three17one2 -pfmxggfx8lgvvln -39tsix7bkbfzqqx -gtmvx3485mjtrdmsfxl9 -7twosevenfour9seveneight65 -ninehscl531 -82rseventkhksixj -vzjtwo6ztbtjpllptmznhxcnljf -xrjnql792 -53twofourtnbfdhhr2xbsh -twogrhgmvhkgcsj2two -bxlgbpnvpkrphcp54pqjhndjfmf7 -hszmjxgjfcnine7 -sixsix2 -688qmpnj1vsfiveeightmfrd -one2sixmhmlmbghfeight3 -5two4six1twosix -58459nine3fourseven -72nineonedtz88eight -4lgjq -lvstjk3twoninefh -eight161652xczvqcjhtvxgc -1seven5zrkchldlfxvzrqjgzg8bl -ngfkczcrbrfvnsevenf4 -six9fiveseven21fourfour -onecsix1 -8fiverpnktj -5eightfourmjkhskllbrb83eightkrtn -hqrkbrcccd5 -sixjlcncnfivexqhqdbkqfour8 -72two -one8sevenfivefour -drgznqtjdfive3 -2vgpfdhseveneight43thtnthree -2kfgbh17seven5 -bclqfgsdvfour9five -seven48oneeightwon -sixthhzzffourfivervssxzncxcthree9 -ninefive8 -49sixnine73cvzgvnvvjqzmht -sttbtlxgxfd69threeoneqbsmdsbpbfzpfpmf8 -zmxffive57 -dncfqshnpgmfmnpqfiveone4br2threeeight -8fivetworps -two2twoeightnine6 -kttfsevenfrspkpsn8cscqgvthreetwo -sphvhseven1mcone8 -qmtlxml2onetxsjdnprxlcd7jfncngfsv -onetxjrzhnb1fxnlncstxthreelsixjlqhrnjhgt -tdftgntv83433 -sfq4dvgbmrseven6nsmxfgzfh -fourmvsgfvnrpp7one36hkfcmd -528dfbr4six9 -threesevenfiveddpmf9five1four -76ninehfivejseventhree -7ninelkkdgqzgksixlhdsmvvhvseven5 -hrjgpzlggnine4two7 -2sixsixjnsfztffone7tb1 -6pjxcpkpdh -84jsnmmllbzsseven -2three572ninekn1rjqg -sseightwofivenineonesixsix3gqxcnztsveight -nm18sxsrgmkqsfrrcqs -xsvgrddftfmt1nnmzndpc -lx5jlnbzmfeighteight -fdfjhnrhdbpskcpgqjhbfjxsx7 -twokxnskxseventwo2xlmrtphhkvhznp -two3mbfczdreightmxfr85 -rqtmx2qrhhqfmvonefour -59fourjsblcnbrzmbcgdzpnrqcptn -4ninexpjzqsjsznqtbclcplftnfour13six -onekmj58kzvs8v -five2nineseven -1two6jhdzt -2n -tlsbhsr1lhnjhbthz3hkgrlglzsix8l -sevensevenngkc7 -4rxnlbqs -jlsg8ftfpmmlthk3fourzqmrcrx -twosixtwo94 -825tpltn1ssszdsdklbrjn9qtz -seven96seventllvlfxddqjvtft58six -seven9ndsdnone -rrdmxl1 -fjhlhhmmsklmfhrrjhvgblgqqhtvhfpzlgshcgvh445 -6threetrsp75twoddj5 -gslbmxjn9twofivefourkbvdcpxrz4fivejbzhxjk -hp6vplls1pvhscqflc -one91oneeight9ninesixtwo -vxntwofour1 -fivexbslqmnsixq8 -8eight8two2 -524 -8five8rlkbjdsixfbqznnfive -threeseven2fourkkmhgmt -sbsr2nine52seven6 -hxqqhcxzfour2tpbkkzpndpkthreefourfour -eightnbtthbztdtdv87oneonetwo -eightninesevennqdx5 -ptmpmmh6 -5svmgf1 -2mhlmtbfive -sixfour883 -x4eight239fivesl -kqjzgkfs4txmfmn -twonine6hjfzkdk -cntncrvfour4mnd -fourhnnsksgkskq11two4 -eightdhnine25 -two7lhbqh -jbjgqt5threefour44threegcn -37eightpkhjshdg -1seven9pqmnsix -361rqvcqhv5zqzshvrffjqp4 -lbptzzf2ninezninesix7 -xvqgxhhn4694vjfdmnnine -rhqjjxbn68 -zdoneightone3tldkfzzpbqblm12three -sixnine7vss8fflxfxvvj -kmpsffxpsxjbdkphpfour8cseven -5hhdbthreefivepfmonesix -7six13gmqvfcxrbsix -twoxtqbsbsxtdjcdzqfourrrtgs86 -52zdbph3kdtmpl -959threethree -bckxnxxvmhbz923fourthree -seven2lsjr -xvspjhcvpnine8sevenqjvzmjbzseven1zone -twogxgz2onefive -9qmstrkqpgqzkxbbprbsixjk3sixsevenone -4vzrjdvbkmlhtwo6mdkhsixfour -oneone2eight9zszpvnfgn3one -httbg6nztnlpgdgf -qlxrnfclphthree5zbzsrszbc6 -ctcvnkckxtgsg1ninefivecrpnqmngqvnhmqcvn -9sevenfivefour -6pkvvone3 -6nine2sixeightthree4 -9qfivedrpfmxfbskhfstwofivergqcg -955mztjrdmlstwo5onedcrzz -sevenrxbnlfpm6twozg7 -four1oneseven34three3 -ninerhc5qninefivebndtqdjrd25 -lsbx5bhlrjfdrmblnkl41576 -dvzbqqbd4615fourbjsmpvhllhjpzc -657 -4ldkzjvdjfone -nine49seven -4kx2rnmpjnheighthjkxpdstb557 -threeeight34three59 -twofourrv48fivetwosevenddcdm -gkpzqjk89 -341 -two5pnbbmp -nine3btkkdn6 -339 -5gxcktphmzxjdtsb8 -8dhfzjf832 -bqlv7klbrbsfcbdhpcb1eightone -fourcpl5mnbtzmrgdjhfl -22hfmg1 -fiveqxtkfivethreesix5mzhj -qfmfvbks1three3foureight1 -twoseven8ntkbkjmtxrb33 -5ninensvcbfb -nine2839kffmnbgvpzflmbvfpg -34six2fivebdvzlbdqkl -7three8five -ndfrcqjrn3foureightfour -one8pfpnpqxt49fourcspbbhlpszkxd -qrmxsvjsnv2szlxhfour -mpjninesixsixmngjcrphthreeseven6two -vmponeightfour5 -776 -22twov7354one -ninexffxsqrfourcsvhgj8eightthree -nghjjvxldbznlqdeight96vhhgslrddvfmc6 -3sixbjfvtgqp4 -rrqlrfksk9zpvmfqqsgdonesixseven -six1fourqhvggsfdzfckntmfbrhthree -one47onesmdhrtjhjk -seventwoptwo7gtfzvgknbone8 -foureighttwo2nnnxljzt2seven -nine66threemshnrl -9tbtkz98lhlprtwonevn -two6two9867 -8foureightvflcsxxblgzcjmdkllblvt1 -fourzlcneight5 -tltmpnhmrbhnntmjpfkfourtnxtmtqnhrsone9 -838lqcmbqqrdgsix -sixthreeeight9grr5nine8 -oneeight4six68 -rppnht6gdrztq14five -4xvgv72threev -fournine2onenine2two -9dhksjxmct23ninempcqhroneeight3 -eightvhgtlfft4threethreecgnpzjf -sfslpsixthreeeightcqnlpsplvtseven7nine2 -drr2 -twossevenhtffztninehkgzvnmgrn7one -three4fourthree6eightthree -eightpkgknqhfour6 -28onethree25 -1sevennine6vkrqnxct -786ptjbkbf1 -ninetjvnxqkphrltpeightthree514four -376mgfkztqseven -3threeqqvqxtvsnjvdkvpnvhk -8rqxcrxmkxczzfkqkffvzcstwosrtmfnzmbf5eighttwo -two93 -854 -29fourhnmjvlseightnvkfbn61 -6zslckzztm3eight -sixfive1 -xzmlzvhcfk6seven8fiveeightpxbgkcl -seven33bdrzdtwotvseven -seven7oneeightthree -j6sevenzjbf5eighttwo -onegjeighteightttmknmgrmx1oneqxxfgone -fljrjlk4sixone7five -sevenbvqxrx27five9eight -bhdfblngngtkq4 -3sevenfivekpgnine9 -nineonelqppbgtgsnine6five -fdmqs1two3twothree7qdhbmkqxf -176pfmhfrgvsseveneight -one974fourdhvbbvfive8 -crlfbone3sevencjcsix -rdgone8lrkhggmkttlmhvvxhvxpgkkjfllq1 -7xtlstglgnqoneeightfive -onerjcplltnd1seven -gsqtjxhd8nndrkjxgmhzdmflslthreetwotwo -jrspjndsvk1seven4hx -5lks -one935onecmfrqxjxqq -9npxbtsfives2 -9one7bghdxtv1 -1khgbtlhxnsevensznknbbdrvgfgpfour -2sixrzlcqcrmgsxsxv -sixthreezqbrlnngnpbbzp6 -eighteightrkjphnngh4lhrrdfhbx -cqbsglsixfiveonetwonvzclvsdgnmmkmchrml9 -7gsqfourpht3two -sixsevenfoursixnine2ninemrgnlmqd9 -9eight2eightsixfkzlmrzqgt -onethreeseven4 -6seveneight -7rq -jmlbxtsxj265qssfhtlgx9 -three22fiveeightfdpfthree -fiveninerflxggpvflnine5dvgcl -2q2twolxksmntbxrbt6 -c6mvlmhgbztpjhlsm2bhgnxtb65 -4six3six4twoonecchglvpf -1eightvvhtdtwofltvfx -bfnfhrlznxzszzdfoursljone922five -g9 -hczxfzlhjntwo7ninesix35 -8ddh3 -3pjxlfour3 -84tcc2oneightdz -two96 -8mrxsdltwo41onesix6 -four1cjqeightvpghbd9qtdkjfzmmjcslv -oneeight3svkfzqh38threetqsxqz -four1dfhhhnhjcsdzhqdrthreethreeqxmjsdnv -99eightsixone3three -995432 -onez6five -6sixtwo -xhsmjfkgpninesevenfive2onepnfivefive -3xvfdxnfzkvmnfvvrqjqzkkq6vrxdeight -fourfiveseven386 -272pcvttjzdzzonegtsxqntflkppfive -tone4mlskzchk9xgcht -xqrkhzhghptwo18 -two25 -seveneight9 -86three6bfmdkslfmxnbqrzjltwo7 -6vclgmphzt7twovmvvshtslgkng6 -twofourfive2nine34rmljd -two2cjjhrtxtvxntdzxstmcsixrfnzfsdmsninejkl -5ninenine9two6 -threegsmgz4three86seven -five8tkdqvkmjqhdrnv9 -gsjhgthfqpcglnbpgfk83three2vnnhlr -1three8lxqzdcjsix46oneightjhb -rhlbq9txlkxvninesl -six4zldvvgjhzhszrqcdhrm9 -hlsqmddjmeightlfcrqkkbnssnxthree6four5 -gps5eighttwo93 -6four3eighthvhlknbxdpseven4 -threespxdrjqsevenseven75pxxmphbqfhvvdtp -four8nhlsqdlgnone2seven -vjcxsixthree2hspmmpqnhrddseven -1tmrz8xfgtvtqmcrninedbpt739 -knjtcfive1eightknnbxgmsix -qbj9 -fivefsrtdfcddfourtwojxdlmxczkljltbrct8 -jnggmc4fourbtblkhzfnnplggfive -96seven641 -pvvqsmtqf3fourdgqrxrtxlslsone59five -five567 -two6nmhbffour38 -rhppzxndqrhmrxlvhn58fnseven -ctgjbnine9ninebkbone4nine -threeone2sixpldcvhfpfourz3 -jxxgfvzglzrzpfk7stplphbdone8eight1 -3zvpstzgnz4gnfzdhnvvl -eightthree88sixtwosixbrr -seveneightqjncs4vdqllkvmfr -1five653sixonethree -ninehkdxcqrhszdxbgvjjkcvfmzzbq5seventhree -bttqsrsz6four5tdjkmrkcqb -23one35three -nine4five -8jhvnq1foureightsixctfxnine -mscdbpkzfptqvpxd7 -7bmfvmtmjm -five66btxzbjmxhqljqclkponeqxcq -5jpsnjbz -sptwone4ffcqgfvzmsevensix -27sevenqxccm -bpttwonine1vrkhxkxlvd -six6rpqxbhdlgm4 -3threeppmfsix1one -dnhbjkmhbcbzkcncmjcrmkrhmhtwo2qxblfsgtwo -mpztn5 -8hkdnzqqs52 -szfsgbgxmlthreefourtwo43six1 -two5lb -mv1three3d -gfqn45 -87brnjzx -zzfszvk6five -3shknsmbksrxtkqdls6fivegfive -5xtgdxhflbnrq -onelbrxfour6 -one3six -95vqkfive -lnsl6sevengxlbqqrlpdxmhjbnc -vkglhnqxbffll6pseveneightninelgkqv -sevendsix3ghjrlkhlkqztkksvvsrqvhfthree -ssfive8vmfdbfivend1xjpnjfbxxtwo -8eighttwodxpjeightvzqzpltldclmbkj -817rmdzceight3seven -49ftonethree9 -eighttwo5 -9pdzqxgpone11ggnksvvcgg9seven -jjljrfmdxg1fivetwo2kglgxjbjvznrb7rklzlhnpbn -srkrbfseighttwo8 -dsjxggrzsnnine1one1 -798xgsix9two -956six -5pnprseventhree -46cpjgjxs -7kpxxmmbrvm8ptwoneqht -3lfghbcksg -72cdcznmtsg2fiveone -sevendvkzjsmsb8vmcdrxgvjv8fivenineeight -3xvdjgnz17 -zkss7nztwo97oneightnj -ctgseven5nineccmbmdkgxmeight6four -five3mfkrhbzvf -5one55vjsgpszbz -zjbzghrbjh8fourrlpcfrxc -sevengndftmqsxfjdzkjzvtwohzx83 -7xpqmfninesevenfdeight6fivexqfj -hfpbkh325xg -ninefivekcsxrvjvvc7twogqxhddnine -ssvfgvmmv8seven799bnmn -fournhvbhhx9 -sixfour8hbzdbkmzqj6three1 -fivemxhmgvxfpsxm4 -sevenseven1srh7 -eight4pnsnh -4gbskpjhlptkflkjgzxlxrfskxxlrxvf -xmj7cngxjrnzcstrbrjsixfmqxnqnljqthreexsnfptpvd -qceightcplznbthree6 -ninebmqthreesixxfl3one4 -fivelb8four2one -9one5jpfourfour37 -sevenfourtwo6zknqzv -twovbcltvfcv1ninechcjrc -seventwo1five8mdxhv3three -rqtgxztqntznineghqqkhfzvhmf1 -rloneightseven88 -7five81one7 -ninepgnzpfktsslpmbonej6d -ktwoseven78jhsdkkbptptwop -six7nineoneninenine -jtcqdt1 -8fivetcqdglbnbxone -92sdvljhqdt6zgmgsznfchjnpn1 -threefour73threefive1 -jbhqh8phjqmm -4jlpncphmjjtthreethreesixpmpttpd -tzxpfds4two4one7sevenjbblnlsl -fxthhmseven4eighttwo -2csbxskpqzqkktsv2 -xjfjmvtkjfoursevenone9xbrl7 -3ninekgg -8fkmzjqdntzone43fivethree2 -4nine2blkhpjgpnone -3six66foursix -9one1 -4mz -2fourfourone -33six2fourfoursix -8j -59trgvlblqbk35gjeightnine -fdtvfddzfourfivepnrvpr2two3 -ctninetdv26seven -crjtlxgcbgfr8sevensix -fourfourhckrdsqkq8eight -two24kdqkzgffpxkjngj8657 -foursdss33seven9zcl -bhl2clcfsqnhpsixjxonefour5 -545vksixeight -three35five7two -sevenmkddhdvqmsthree2five -7zmxsix2ckskqcglhtgthree59 -xvsthree9 -22q -ninetwo3threenineeight8dzfrf4 -cqnbzgtjthreed2 -76jkpnonepbvhcdpfd8 -sevensevenmjrzvbkkknkfbq2seven5vms5 -threedeight8znlvhlzpbzvhvxxmgdt -cndxthxtvztwonlcqcshvnclzvxmsdrtn1 -hcz8vnkrrkmgpbxk2nine -5h5oneeight3 -5m1five99six62 -l1eighttwofour -2ccxhrlhjbr -tfpzvqj4gs9 -6twosixfivenine1 -8zjsixqnrzlfxdhm8fvpfnnjxhhpggjtjnsix -jzmgdcptone3hqbhthree -jvqmsixone2hlqseven7 -f9eightqkdpqlctcmmzx -98fivethreexgl9 -4bvztrtwo -fivetnrqt8twokfxrsftsnfour -onetwo33threenvng -sixvznvnt3scseveneight81qjdbj -threenine1 -47rjklmqqpnthreeninehcslqslrbjtwoeight -8one1twotlsgf -qpzvxrb242sevenrlssthreethreem -eightthreethreeeightxxrz3gjmccv -862seventhree5one -hjjx3threegsmggrfb -twonc4eightfour43r -7cblplgthnineone1 -fxzjsnfn2xrzfhrsq -one4xbvtvtxvqqmgnm9jdjxbmdjlldrqtzhrsxqseven -lmgtwogqghh9five3seventwott -oneeight2b -4five2525fivembnftdmkxzmq -3m4ninefoureight6ttxrcdgnine -threeeighthcnxpqfgsvv12rkd -gntcxfth588 -sclktwofivesnxkfq7twoxdvlxgvtzjtlgfspzk -rg7 -3vbrgrsevenzgncpj55nine6 -seventhreefiveshlrnfnqjvd21tldlrkjmtwo -8scjnkfpklljchzszvvfourjpvmvmgr6 -8fivepdlqzrsllkqkqnine9four1lqgjz -qmtwone7six2one5 -xrvhsvkvjb2nineleightwob -ninefourhkdzxrgxxhfmsninedlddz5nine -1sevenhslkkjfxz -seven5six94ninemjvv -nine4three -onesktp3szmp -cqconetwoninek4sevensix -nine892fouronegxhscsn -4mvzntcldzjxbmrrtzsheighteightbhtknp9 -4nineoneightfl -17kdhhcnvnnq -ckmqgt16gs -threefivefour9 -3twofoursbzpbdqlj5 -qdxzfxdfnsgj3twofour8fivefour -4xninesixzxkbqsgvpf -fourqthree1nine -one6fivenine2txbfgfkxzfmshmzhv4eight -9lhdxrmvfive -xktdxtwo71 -225two -two3csjhrszsfdkqmxcc3ctlhlbk4nine -bfspnrjxsgoneftk1665 -4fivefivecsbqnljgrk -8xmkhgonefivethreethreenine4zbh -nineone3twofour -pflpcxx7two1jkzqmthreefive -ksnjdtfhrnvcp2six -sixrfsrqfbdvn1c -sixlfmqfsnnnzhmqbngct2 -x9x7sevenqjn -eightninethreeqttkfm1seven -59zx923six -5rnrdbmpddjldqjnrxsdsrgpfive8 -one38432spgsfkjzeightxxk -95csptxbnmdfourmzqccclqjzntftgmskvf9 -tlbbjckfnine6mssscphp4rzndb5three -4sixnineeightztjdssbflnine -dzdftgcnvvrx669 -6six7threeh -eight7onelsrkgtkgdkgsntwosixonedn -4fourfourninenine1 -rtwonegfzmbhjbmbsvf3seven1 -3czkzzzvqbt5rmdskr -9bmponetwo -ltvcjgvkqqmfivethreeeight1jls8 -14oneeight3qtkgbpsnseveneight2 -dmrgm4 -twodlxpltlcxxks5 -tdxfeight3pqdsz35 -6hvfbrqccktfqhnnineone7btwovmgssfts -66threedrsbtwo -prbsfivetwo21ccqb5qhxz -nineninebkzq829fzkd5 -pddtlrsj7twonine5two61seven -threeeightctnkhjnqm5sevenvdjqsjpknmmslmdb -76nqxdvzrninefszr31 -3gvgclgxbvs5eight68sixnmppfhcqhbmzq -1eightrkninefive9four -3hfour375three -eightthree54sixninenggbmckqk -zbtqlmfqmbdxllqpffeight9 -1threehxmlj1czzlphp -4four7stfrr7 -four6htkfsfx3qlk41seven -qsixndconehconenine12 -sqvvptnzbqdmgjlmctqzhlldmzthreefour8 -f6ssgkone -twofive8kqs -foursevenxj6two -rqlqljzzdrzq4 -one3ninefiveonesixpgjsnrvnine -jktfqdxpfive3bhhczvnfive -fivedtcgstrzg7five7seveneight48 -7sevendnqnine54fivecvhzf1 -9fivebseven -nine9mjbjmmfkpxdjhch87hpzx -fivejdqrrx71sixbone6v -2qkkng5 -fiveksvzs3threenine -prtllbkjhxjhg4 -fctmfcrmqgq78rckrfq99d -9seventnsrsbxftwothreefgpzznbjcxh -three34two -ggvr32sbmseven4gjfhqstzq -threefour4three -two6sevenpzdvjdlninesevenfour -pgneight692vqlnhmndjvlj -six8sixqclbkscndtsfczqxhzt9bsf -fivefourdlrjnbvbnine3six72five -4fivefiveglchzczdstone -six4two -7threefoureighteight -ngjpztzcshbksbzlbdnqnine4gbdsbthreetwo2 -39sevenseven -sxcxnqrskgzkzmrkkdbxjthone3 -1lf9onebg -9lgfxnfffh9qbdxdl65fqlsjgdljrcn -37three1twofourfive -92onegdcczrfrkztxttftv -fxzkfnrmh7fiveggfour -14fivetwoflrr59 -7sixtzfpxrfrtnqxvkcgtc -drmjeight1sixthreeeightrxqjknmql6vzz -bsmbtp2 -ninetworfour7vgtvfvbv -ninethreesccxmtmbnnine2eight1five -47twothreethreeonethree7 -ftqjtwo7dbcnfdprnn335 -d5three5b -5eightfivevnf4one -1dgtwojfxnqpc -sixsixone7cpxpnzgeightbvx -33 -7sixtwo4zjb -pzfxv57one9fourfour -9two8 -5nineone1 -one6five9twotwo2vtnqjtpxxr -6threehhrmtfsgld -lbdjsslmqpspxrxqtp186rzjfour -six4qd32dczd3 -six5sevensix6dhlgzlfvgkthree4 -rmgdbsvqqnt7five -8slpfjnhtggzpqr7q8three3 -fivecmsjjhxhh6rmvsnlfive -2onejrnnkpkf7sixsixthreetqkfbk -ltwonejvqkzsltnine5fivemftvx -fourtwolkxrtzdsninenine5pznzrqbcmnph -3rzkfvqfnine -6xbninefourszjltwo6 -59qkf96twofour -fivecp37 -bcpmljn5 -7stthfdseven2threefourcrbxjjfnzbfqsfmqjlts1 -cpvsczrlrgnfpqbfbgh415five -seventhree6 -tworqbfj7114clslxks9 -six5eightjtnq -7six9llnsseventfmflxsjkdgq -six8tznfvz3 -fourpnmbqdbj23 -2ninexltrcbkjlb -665fourptmcdj -seven4mkvn1tkthree8s -eight84one -rhskrpddrmbgg7eight -qgbtqls7fd63xngfvcgdp8kkffgxdcs -9seventhree -lslprchqthree13fourkdfsrtfrthree2 -246eight -5ldnrqhhqmvtwojhtjhflzczsb9kklbkldvc -36fivebgn3vzgvjffckfour -vbxqnvhvmsix9lthree6zvmr8 -eighttwo23 -flqbvc23 -loneightsix9two -xkzvpttgfourfive6rnngs -threeseven6one5 -sixthree5rgklgfxllqzk4onetwo -one15dhhtcsx -zdmhgtnsjs22fjfourqzdsvcbgq -4four5 -hfjrsqjvtjkseven4kqcqbmbseven -241lgrtbsh -fiveptwo9sevenfpxpbfdoneightzj -9eight923xnxgndjfg -two8fivenine9cqcqqssbfc -fivetwosevenlgrvqvtsv5tcmsvbmggvfqqg7 -5mgkmn6ninetwo -mzsncqkbtq45r -fivefivegxzjvnxcbq8ptrzpjm5three -8ngzppeight646seven3oneightf -sevenvcsix8 -vxkmqgpsixgs2 -9jv9 -17jzmvgzc -6dz9 -sevenzzvone86twothreeonesktlhbks -three57vmlrfhcqkvlttzhcbtgqxgtbxb -fiveeighteighttwotwotdtfncfjn8pkxdvkfgr -8k5dsrxlvtmvdsixtwo -nine2fivernnckm -fpngdckp48onepbslnjdm2zbthxqp -nhrl8two -eightczdrdrxninesdqlqhhvq7twoz -sevenssmdflds6 -8sglqfive7p6threeqrdkmg -4brkbn -t4onepvf9three -mdfnjqjdl2lsb2btsj -tthreeljckhjqxbcjvmvx27jrffive -fiveqldglnp2six9vqvdcqxbdznghqcrnbxm99 -9pmkfmr6sevenlfjbvxqdbstwonine -threeninezmhc8three -one4nine4vc -8nqtgvnvcttpsrpsfive -pjjkmpfjpjzsbhzrgrkk96snqbtkkkd -6four58fourtworg -4fivekrjgx4 -mqrzmhhvlvknzdknine9 -one8seven2qd5 -pjhkthxm4 -sixjmbljdchjsrs3bvvnzqcqmjcm3eightwoc -8ninekrb5vxhbhdtdfd7 -7eightvlrsklsbpc3 -2onethree1 -4nine6qvfive2dlhvfour1 -threedkvnvvsmlthree149 -szseight88fourlfcvbzmone1dnzbnkq -onekxnsfour7 -onefivefivefive6rmpjhdvk2 -two75 -xrxzfmnqrvrtflqscnhlbh14vf -hsplmrdxtknine7tqtlk -sncgfpvz43lvjmvrpv -rdhoneightdxrvxhnthsevenfour72dxcdbmpbfd -six2oneonethree1xdszcmstmq -seven1one -12fourbtnxmsrvbnn6 -qfive7twomcmcsgsseven9 -five1nine7 -qcntzlp8one -qgpeightwosix8lbclbpknfive4ksqvptntmonevlrtrcs -nxmff91hzscmcthreesh -6three16 -hrlgqhzhqone14fivenine -fournrvxrxsmvsskdnbzs5zgmfh1m -four67one8drnprkbgt -81brchsdqdlk5fourseven2three -ninefoureightfjtmvsnine9onefive -two7rnl6three9 -eightseven2threethreenineqtwonezkq -eightcfkglfmzqjgrns99seven -dbzvbkslvthreefiveeight141gcklzxrzms9 -4frfvf6fourgnsm -7hcgjbbpbl9qbzzhfq -mnfllkcqgkninefive9 -4qdld5hqgrthreeeight2 -xlnnine6lksthree -lkvcnntznk33three4nine -8five2twonem -695mzfnhtlbhpvn1dfour4 -47seven811tzhqrrshdm -vgoneightnsr3fivethreetwornvbz -gc2 -3sevenxvmzbpknnqninetwofourtwosbpmqk -4seven8 -2fivegk47gsqtvdms -1jqgxbmgs4zxkrtvvtsjf1nfsdgtqrmthreeeight -vbvjdlnfiveninefive162nine -jqqsfqbfq2clfmfxz -2hmn1v2twofour16 -phchfbxz3one -zdcqgg34vqkhlbkc96six7 -5eightbghcktjjninermkpmbpk -4zctvpqqfxqdpf -six5onebljkhvlzfour3vf7 -three7sevenspczxeight3 -eightsjxdbgcjllvpxn5ninehrhlp -r4 -vtkqxmmdfkmbxbvgr633 -nrtfbqdthb1974jsdfive7jc -twothreenineeight3 -seven9c9 -l4rmngrjjl8phsftfrtwoninethree -8hptpqbfltv6twovcz5twothreethree -hncsxnxrbx174dbsddg9n -7fpvztb -eightnineq5kkd1seven -gbj8rvvqjkbp -sevenninecjrxhfsevenfivembxm1nkjrdtrllqrglrrxxj -21eightfive84mkdnzone -3rqjlbfzjninesncjnxxqnine9 -cvtwone2k1zmp65 -1v -one7eighteightsixqkfsm -44jkrsmcthreekktxlnnzjdslhfsmzl -dmhxlbsixh35 -four8ninetwofour864 -5threezmcq -6ninefive7 -4nine9twooneeightwoz -5klvpcfxpkhdhx717 -6stgznine4vhnsnhts9 -9threeone98seven1vnnvgxslf -sixeighteightztpdhvt2zqjstmzmtzgsfthreezzhhdr -twodtbkqsjgtwohfnsqcrmpjfourhkpnsfdkfive6four -ggrxkrdzmthree3 -sixlflcmmjrs5fivenine488 -four94hmhvlczssonedvgchseven6 -ssoneightfbfctjqv43psixsevenslqsfpkb1 -bdpnkb9eightnvtwojxbztssqfmninethree -cpcnkvdbrqrxtfnmzbqgffivesix91fivehgrv -five5495eight2 -7foursix93seventwonbhtmfrbqgq -tpqhxqqxpcnmlhqhkz123ninefive -knqxmrrmninegr4 -14qhlbkthreellvnqpfpbb -7eightcrlb6eightthree7 -twom3 -gtzdljfdzpdg4zbnzbnxmpcpfsevennine3 -svfjvnninefourpqsdmjcfhvccnjkpf8 -dzmoneighttwovk5tvpnmxfive -88msthvt4vbmnbrzjone -nbgcs8nine -4three53pczsx1sevenmzmtrzz -four24qphdrxfsf -gdgj3f -hthphptmmtwo7sixsevenoneightls -qxbhjmmqsixfkfn36three6 -eightmkmdtvkctkvptsbckzpnkhpskdmp3 -six2twobgzsfsptlqnine42xtmdprjqc -pxreightwo7 \ No newline at end of file diff --git a/input/day02.txt b/input/day02.txt deleted file mode 100644 index 34a6672..0000000 --- a/input/day02.txt +++ /dev/null @@ -1,100 +0,0 @@ -Game 1: 1 green, 4 blue; 1 blue, 2 green, 1 red; 1 red, 1 green, 2 blue; 1 green, 1 red; 1 green; 1 green, 1 blue, 1 red -Game 2: 2 blue, 2 red, 6 green; 1 red, 6 green, 7 blue; 10 green, 8 blue, 1 red; 2 green, 18 blue, 2 red; 14 blue, 3 green, 1 red; 8 green, 1 red, 9 blue -Game 3: 6 green, 5 blue, 9 red; 4 blue, 1 green, 13 red; 9 green, 14 red, 1 blue -Game 4: 14 green, 3 blue, 16 red; 20 red; 4 green, 2 red, 1 blue; 10 blue, 11 green, 18 red; 3 red, 3 blue, 6 green; 2 green, 18 red, 9 blue -Game 5: 5 green, 4 blue; 1 red, 3 blue, 2 green; 4 green, 2 red, 15 blue; 11 blue, 8 green, 4 red; 4 red, 3 green; 4 red, 3 green, 7 blue -Game 6: 6 blue, 10 green; 2 red, 6 green, 2 blue; 4 red, 4 blue, 1 green; 2 blue, 7 green, 2 red -Game 7: 14 green, 3 red, 2 blue; 5 blue, 3 green, 2 red; 1 green, 3 blue -Game 8: 7 red; 3 blue, 9 red, 1 green; 5 green, 5 blue, 7 red; 1 red, 2 blue -Game 9: 3 green, 4 blue, 1 red; 3 blue, 12 green, 18 red; 7 green, 9 red, 8 blue; 2 blue, 10 red, 12 green; 4 blue, 1 red, 1 green; 4 blue, 6 green, 6 red -Game 10: 2 blue, 4 green, 2 red; 7 green, 4 red; 5 red, 8 green -Game 11: 1 blue, 10 green, 15 red; 1 blue, 2 green, 2 red; 5 green, 10 blue, 8 red; 13 red, 7 blue; 1 red, 9 green, 4 blue; 9 blue, 9 red, 8 green -Game 12: 1 green, 10 red, 3 blue; 14 red, 1 green, 4 blue; 6 red, 3 green, 12 blue; 13 blue, 1 green, 18 red; 4 green, 14 red, 7 blue -Game 13: 1 red, 3 green; 2 green, 1 red, 5 blue; 1 blue; 1 green, 7 blue, 1 red; 1 red, 2 green, 7 blue -Game 14: 7 blue, 9 red, 1 green; 8 red, 2 blue; 11 red, 18 blue, 4 green; 2 blue, 3 green, 1 red; 1 green, 8 red, 9 blue; 2 blue, 8 red, 1 green -Game 15: 8 blue, 3 green, 15 red; 13 red, 10 blue; 2 red -Game 16: 1 green, 1 red; 1 blue, 2 green, 2 red; 1 blue, 4 red, 1 green; 3 green; 2 blue, 3 green, 4 red -Game 17: 1 green, 3 red, 14 blue; 1 red, 2 blue, 2 green; 3 red -Game 18: 1 red, 2 green, 8 blue; 2 blue, 14 red; 4 blue, 2 red, 2 green; 6 red -Game 19: 2 red, 11 blue, 18 green; 3 red, 6 green, 3 blue; 7 green, 1 red, 10 blue -Game 20: 10 red, 1 blue, 4 green; 4 green, 3 blue; 10 green, 13 red, 4 blue; 2 red, 7 green; 4 red, 3 blue, 5 green; 13 red, 1 green, 4 blue -Game 21: 20 red, 4 green, 5 blue; 10 red, 11 green, 4 blue; 1 red, 8 blue, 14 green; 11 green, 8 blue, 15 red; 8 blue, 2 green, 13 red -Game 22: 2 red, 11 blue, 4 green; 1 blue, 3 red, 6 green; 6 green, 1 red, 1 blue; 4 green, 7 blue, 3 red; 11 blue, 6 green, 4 red -Game 23: 6 green, 3 red, 1 blue; 17 green, 11 red; 1 red, 2 blue, 13 green; 13 green, 19 red -Game 24: 1 blue; 12 red, 1 blue; 1 red; 12 red, 1 green, 1 blue; 11 red, 1 blue; 12 red, 1 green -Game 25: 12 blue, 6 red, 3 green; 8 green, 14 blue; 11 green, 5 blue, 6 red; 4 red, 12 blue, 8 green -Game 26: 15 red, 13 green, 9 blue; 9 blue, 8 green, 7 red; 2 green, 6 red, 3 blue; 1 blue, 7 red, 3 green; 13 blue, 4 green, 18 red -Game 27: 9 blue, 5 red; 15 red, 12 blue, 3 green; 12 red, 12 blue, 1 green -Game 28: 18 red, 4 green; 4 green, 6 red; 1 blue, 6 green, 19 red; 9 green, 17 red; 4 green, 5 blue, 18 red -Game 29: 7 green, 6 red, 6 blue; 6 blue, 19 red, 4 green; 4 green, 4 blue, 13 red; 5 blue, 15 red, 10 green; 2 green, 6 blue, 5 red; 8 red, 10 green, 6 blue -Game 30: 1 green, 13 red, 12 blue; 1 red, 2 blue; 11 blue, 1 red, 1 green -Game 31: 8 green, 18 blue, 17 red; 4 red, 8 green, 6 blue; 9 blue, 7 green; 3 green, 1 blue, 12 red; 5 red, 10 blue, 11 green -Game 32: 17 red, 17 green, 7 blue; 18 red, 16 green; 1 blue -Game 33: 16 blue, 3 red; 9 blue, 1 red, 2 green; 3 green, 7 blue; 1 green, 4 red; 3 green, 1 red, 8 blue; 5 blue -Game 34: 5 blue, 8 red, 1 green; 9 red, 10 blue, 7 green; 1 green, 14 blue; 8 blue, 4 red, 10 green; 15 blue, 8 green, 7 red; 2 red, 6 green, 3 blue -Game 35: 13 red, 9 blue; 7 blue, 16 red, 10 green; 4 red, 6 blue; 3 blue, 12 green, 7 red; 8 blue, 6 red; 10 blue, 3 green, 2 red -Game 36: 1 blue, 9 red, 2 green; 11 red, 3 blue, 2 green; 2 green, 6 red; 8 green, 11 red, 3 blue; 4 green, 7 blue, 11 red; 9 green, 8 red, 2 blue -Game 37: 8 green, 3 blue, 4 red; 14 blue, 10 green, 3 red; 19 green, 2 blue, 7 red -Game 38: 2 green, 3 red, 3 blue; 3 green, 9 red; 13 blue, 8 red; 6 red, 5 green, 13 blue -Game 39: 8 red, 5 blue; 4 green, 5 blue, 3 red; 18 red, 2 green, 6 blue; 2 green, 5 blue, 17 red; 1 green, 2 red; 5 green, 6 blue -Game 40: 12 red, 4 blue, 1 green; 11 green, 20 blue, 4 red; 10 blue, 4 red -Game 41: 2 green, 2 blue; 2 red, 2 green; 2 green, 2 blue, 10 red -Game 42: 6 green, 3 blue; 2 red, 2 green, 1 blue; 3 blue, 5 green, 6 red; 6 red; 1 blue, 6 green, 12 red -Game 43: 1 blue, 4 green; 1 blue; 2 blue, 8 red, 2 green; 2 blue, 1 red, 4 green; 1 blue, 4 red, 4 green; 4 green, 7 red -Game 44: 8 green, 9 red; 1 red, 2 blue, 13 green; 4 blue, 8 green, 17 red; 13 red, 13 green; 1 red, 9 green; 19 red, 3 green, 3 blue -Game 45: 10 blue, 2 red, 1 green; 6 green, 5 red, 8 blue; 3 blue, 1 red; 4 green, 10 blue, 4 red -Game 46: 3 red, 8 blue; 6 blue, 7 green, 6 red; 6 green, 1 blue, 7 red; 8 red, 1 green, 5 blue; 9 red, 12 blue, 10 green; 7 green, 5 red, 1 blue -Game 47: 5 red; 2 blue, 2 green, 5 red; 3 green, 7 red; 14 red, 3 green, 2 blue -Game 48: 7 blue, 12 green, 2 red; 11 green, 10 blue, 1 red; 1 red, 13 blue, 2 green; 14 green, 2 red, 9 blue; 2 red, 12 green, 3 blue; 2 red, 7 blue -Game 49: 4 green, 5 blue; 9 blue; 10 blue, 5 green, 2 red; 10 blue, 2 red, 2 green; 1 red, 1 green, 4 blue; 2 blue -Game 50: 2 red, 2 blue, 7 green; 7 red, 9 green, 3 blue; 5 red, 10 green -Game 51: 15 red, 9 blue, 4 green; 5 red, 2 blue, 15 green; 4 blue, 3 green, 20 red; 12 green, 1 red, 10 blue; 10 green, 5 blue, 13 red; 9 red, 10 green, 11 blue -Game 52: 3 blue, 12 green, 1 red; 6 green; 1 red, 8 green; 1 blue, 1 green, 1 red -Game 53: 10 green, 7 red, 12 blue; 9 blue, 6 green, 2 red; 8 green, 5 blue, 5 red; 7 blue, 16 green, 11 red; 6 red, 8 blue, 13 green -Game 54: 10 green, 6 blue, 3 red; 6 green, 2 red, 8 blue; 9 blue, 11 green, 2 red; 10 green, 1 blue, 3 red -Game 55: 4 blue, 1 red; 3 red, 7 blue; 12 red, 4 green, 8 blue; 3 green, 5 blue, 1 red; 13 blue, 12 red, 1 green -Game 56: 12 blue, 15 green; 1 green, 7 red, 11 blue; 5 green, 9 blue, 1 red; 8 red, 5 green, 6 blue -Game 57: 4 green, 11 blue, 18 red; 14 blue, 14 red, 16 green; 7 red, 15 green, 3 blue; 18 red, 20 green, 8 blue; 12 blue, 9 red, 16 green -Game 58: 10 blue, 9 green, 8 red; 13 green, 6 blue, 8 red; 8 green, 4 red; 4 blue, 1 red, 18 green; 7 red, 10 green, 10 blue; 15 blue, 10 green, 3 red -Game 59: 17 green, 2 blue, 2 red; 2 blue, 1 red, 8 green; 14 green, 1 red, 1 blue; 15 green, 3 blue, 2 red; 2 blue, 8 green, 1 red; 1 blue, 1 red, 8 green -Game 60: 1 green, 1 blue, 1 red; 4 blue, 3 red, 2 green; 13 green; 2 blue, 2 red, 8 green; 4 red, 12 green, 4 blue; 4 green, 4 blue, 4 red -Game 61: 3 blue, 7 red; 5 blue, 8 red, 1 green; 1 blue, 8 red; 10 blue, 2 red, 1 green; 1 green, 5 blue, 2 red -Game 62: 10 red, 2 green; 8 blue, 7 red, 2 green; 4 green, 2 blue, 10 red -Game 63: 1 green, 3 blue, 5 red; 6 green, 5 blue, 2 red; 3 blue, 7 red -Game 64: 6 red, 20 blue; 4 red, 3 blue, 2 green; 3 green, 19 blue, 6 red; 2 green, 6 blue, 3 red; 13 blue, 5 green, 5 red -Game 65: 6 red, 9 blue, 20 green; 6 red, 16 green, 4 blue; 12 red, 6 green, 5 blue -Game 66: 2 blue, 5 red, 4 green; 13 blue, 2 green; 1 green, 6 blue -Game 67: 4 green, 5 blue, 2 red; 1 red, 14 blue, 6 green; 1 green, 14 red, 5 blue; 18 red, 16 blue; 15 blue, 8 red, 18 green; 1 green, 18 red, 6 blue -Game 68: 1 blue, 9 red, 7 green; 7 red, 1 blue, 6 green; 5 green, 1 blue, 8 red -Game 69: 12 green, 3 blue, 4 red; 9 green, 8 red, 7 blue; 4 blue, 5 red, 10 green; 4 red, 5 green, 7 blue; 9 green, 4 red, 2 blue; 3 green, 13 blue, 1 red -Game 70: 9 red, 1 green, 8 blue; 11 green, 13 blue, 12 red; 3 blue, 5 green, 8 red; 1 red, 14 blue -Game 71: 10 blue; 2 green, 8 blue, 9 red; 5 red, 1 blue -Game 72: 3 green, 5 blue, 5 red; 1 blue, 1 red, 2 green; 4 red, 4 blue, 1 green; 5 blue, 4 red, 1 green; 6 blue, 3 green, 5 red; 5 blue, 1 red, 4 green -Game 73: 3 red, 1 green, 1 blue; 7 green, 2 red, 1 blue; 2 green, 1 blue, 3 red; 1 red, 4 green, 1 blue; 3 red, 5 green -Game 74: 5 blue, 1 red, 4 green; 3 red, 2 green; 4 red, 6 blue; 2 red, 2 blue; 1 green, 4 red, 8 blue; 5 blue, 4 red -Game 75: 3 red, 5 blue, 3 green; 9 green, 6 blue, 7 red; 2 green, 3 red, 12 blue; 14 green, 4 blue, 10 red -Game 76: 1 blue, 7 red, 1 green; 6 red, 1 blue, 2 green; 4 red, 2 green; 3 red, 1 blue; 16 red, 1 green -Game 77: 3 red, 10 blue, 1 green; 4 red, 7 blue, 3 green; 7 blue, 6 green, 7 red; 5 green, 15 blue, 7 red; 12 green, 5 red -Game 78: 6 red, 10 blue, 15 green; 6 green, 11 red, 4 blue; 6 blue, 8 red; 4 blue, 7 red, 2 green; 11 green, 7 red, 11 blue; 3 blue, 14 green, 6 red -Game 79: 14 red, 6 green, 4 blue; 13 red, 6 blue; 6 red, 13 green, 4 blue -Game 80: 8 red, 2 blue, 8 green; 6 red, 10 green, 4 blue; 3 red, 9 green; 2 green, 8 blue, 7 red; 7 blue, 3 red, 11 green; 1 red, 12 green, 8 blue -Game 81: 9 red, 4 blue, 11 green; 1 blue, 4 red, 2 green; 5 red; 3 blue, 2 red, 2 green; 14 red, 12 green -Game 82: 5 green; 2 blue; 2 red; 1 blue, 2 red, 11 green; 8 green, 2 red, 1 blue -Game 83: 3 green, 7 red, 6 blue; 7 red, 7 green, 11 blue; 7 blue, 13 green, 7 red; 12 blue, 10 red, 2 green; 1 green, 11 red, 7 blue; 12 blue, 9 red, 9 green -Game 84: 5 blue, 1 green; 16 green, 4 blue, 8 red; 7 red, 5 blue, 16 green -Game 85: 9 green, 20 blue, 7 red; 19 blue, 14 red, 2 green; 10 green, 2 red, 10 blue -Game 86: 1 green, 3 red, 5 blue; 9 red, 2 blue, 6 green; 8 green, 14 red, 3 blue; 18 green, 2 blue, 7 red; 2 blue, 10 red, 14 green; 17 green, 4 blue, 12 red -Game 87: 4 green, 8 red, 13 blue; 7 red, 13 blue, 4 green; 1 green, 8 blue -Game 88: 9 blue, 11 red; 5 green, 7 blue, 12 red; 10 red, 2 green, 1 blue; 2 blue, 5 red, 5 green; 7 red, 6 green, 9 blue; 1 green, 10 red, 5 blue -Game 89: 7 red, 2 green, 1 blue; 1 blue, 2 green; 6 red, 1 green; 7 red, 1 blue; 3 green, 3 red -Game 90: 8 blue, 2 red, 3 green; 9 green, 4 blue, 3 red; 7 green, 11 blue, 2 red; 13 green, 12 blue, 8 red; 10 blue, 2 green; 5 green, 1 red, 9 blue -Game 91: 2 red, 2 green, 4 blue; 5 blue, 2 red, 16 green; 11 green; 3 blue, 2 red, 8 green; 4 green, 3 blue -Game 92: 8 red, 12 blue, 3 green; 11 red, 10 blue, 6 green; 14 red, 8 green, 14 blue -Game 93: 3 green, 2 red, 3 blue; 3 green, 3 red, 1 blue; 2 blue, 16 red, 3 green; 2 green; 5 green, 2 blue, 2 red -Game 94: 5 red, 2 green; 9 red, 3 blue; 2 green, 2 blue, 5 red; 3 blue, 8 red, 2 green; 8 red, 1 blue, 1 green -Game 95: 3 blue, 4 green, 7 red; 7 red, 1 green, 15 blue; 6 blue, 2 green, 7 red -Game 96: 2 blue, 1 red, 6 green; 7 blue, 8 green; 1 red, 7 green; 2 green, 14 blue, 1 red; 3 blue, 1 red, 7 green; 4 blue, 11 green -Game 97: 2 red, 9 blue, 8 green; 3 green, 5 blue; 6 green, 1 red, 9 blue; 2 red, 13 green, 1 blue; 2 green, 2 red, 2 blue -Game 98: 2 blue, 1 green, 1 red; 4 blue, 5 red, 1 green; 4 blue, 3 red, 2 green -Game 99: 17 red, 2 blue, 4 green; 4 green, 8 red, 6 blue; 5 red -Game 100: 6 red, 4 green; 3 red, 2 blue, 9 green; 1 blue, 5 green, 14 red; 1 blue, 2 red, 2 green; 9 red, 1 blue, 14 green; 2 blue, 11 green, 8 red \ No newline at end of file diff --git a/input/day03.txt b/input/day03.txt deleted file mode 100644 index 9253ed7..0000000 --- a/input/day03.txt +++ /dev/null @@ -1,140 +0,0 @@ -........................617.........123...........341.........................293..................38..19.753..................533.......... -565.......................-..............951.....+..........354.....697.58....*.....941............*.....*.........+....529....&.....36..... -....1.....225...73...................472.......................-....*......920..999.......646..771.433......407..405.....*.......426*....... -.....*....*........./227..-113........@...825/.....348...881......603...........%....793...=............235*..............472.........82.941 -..360..432..997....................................*.....=............62...702......*..............................273..................*... -...........&.......833.489.......@.........176...895............503.......$.......493...............929...............*.302....492.526...... -....................*.....+....85.......................601............................................*386......*...96...........*....*613. -.....650.360+...#..589..............................221*..............927...........941..404..+669..............823.................360..... -.527...........919.................799.....................&............*...............-..............485............-..754................ -....&....*187........./149............*.....................653........84......120...............-.....=....581...574.76....*287..968....... -.......26..................497........254........#..682..........$.236..........................111............*...=.............*.......... -....79.......394.......112.-...762.............847....*........450.*...$...495&........$.49.............#.....213...................171..... -.....$.......*..........$....*....*136....594......134....&............991..........292.................374.......123......676.........$.... -...........957...&..740......631..........*.............403......186.........................................260...*..308................... -................582..*...............463.......524....-.....883...*..463..........389....71......+594..........*...45..+.................... -.815....520..........747......@......*...588.....-....14...*.....632....*.946........../...............$982...927.....................822... -...........*..............271.889.631......................889........951.........363.774...............................%975...546....*..... -........709.......561.....-.................+885...................................................121..............794.......&....450...... -............469.............478.44...799..........273..218.....361..........763.88............977.....*.969..............528................ -...30.=........%......746.....*.*.........................*401.*...............*.........27......*.......*.................@.....#....572... -...*..749..............+...573...286..539........110...........101................241...........132.217..736...................714.......... -.........................................*976...*....897.136.......@............./..........338........*......149.....894..874.............. -...267*537.................850..864.262..........178..*..+......721.......314..............$........834.........%..........@................ -...............966.479.............*.....448.........98....25#......................524.................728.871....../.............258...... -....109...........*.....570....775......*...............82.............933.107*......*...415..109............*....795...*953....#........... -......%..................=.....*....408.277.677...143...*................*.....792..501..*....*........354.629........81.......899..695..... -................*166............98.%.........-....*...677.......+.........................955..26.....#....................103......+...140. -.............286..................................638........158...........4.&....................57..............-...........*......../.... -...968...............112.@139.....102..............................860.546...922.847.....888*390..........88.....796.........507............ -...*...........550..*................*493.................54*299......*................................$.................348........%....... -672...........+....142......................................................548..343....................843........&.....*.......773.....3.. -.........791.........................................................&..#........*.........383..716.........599...415.155................... -.565......%..............49........................712$............159...854......662...-..*....=.....*.......*............173..973......... -......./.................*....624......905....590......................................271..445....958.42....531......293..*............866. -....645..877.............304...$...761*......*.................718*495...............................................*.....587.....815+..... -.........*......958*319......................40............678......................701*422....37......357............170................... -..........493...................438.224...............&.....*.............814..................*...832*........%863................448...... -......-.............727.....412.*....*...........@...514..563...............*.....853*194.986.475.....................................@..... -......274.....810....*..874.../.688.40...271..646...........................66..............*........351..........*122.97&.435.............. -.236...............755....*./...............%..............112...................492.......798........*...946..717........./...........453.. -...*...........509.....766..169....&.........................*......................................719......=.........998.......*....*..... -309....896......*................773...........+..155.797..#.........164......296........................................-.......312.452.... -..........*..216.............670..............90..*.........705.......=.......*...893.214.....655.......439*158..345.$.......51............. -....#....746..................@.....874..*.........46............456...........26.*...*..........*...............#....491...*...421*795..... -....596...............578&..&.........@..190.256................*......614........769.47........7.......$..+405.............536............. -.............868.973........613.+.......................516........431*...........................613..759......+.....546.......441...&..... -.....134*82.*.....*..483=.......940.987....................*...................13....-..............*..........184.............*....789..... -...............697........347-.................23.#........27.568/..............*....312.&373....889.................%........682.......673. -.........930..........141..............997.....%..528.=829..........254.................................55.......690.765....#...........$... -...655....*.............*....636..........*....................36..$..................503.....*417.....*.....942*...........67..92$......... -.....*....397...999......441...*....568...686............................................=.376............-.............683................. -713...79..........@..........423....$............935...................899...303$....=..........579.......720.508.......%....=.............. -............416.......22.....................$..*............624.........*...........922.......*................&...........63......977..... -...........+..........*..........*27.......943...35...........-..........83..210...........497.854...28.......&.....*344.................... -662..892..............146............................886.........503........$..............*...............253...678..........441........... -......*...814.......*.......%....../203...35......68*....#.......*.....579...............35.....650...../......+......716............901.... -506..152.*........777......551..............*898........225....728........*224...................*.....425......917..............500...*.... -...*......984...........................861.........&22............30...+........353........77.565............#............405...@....873... -...99...........109....490&..445...322../............................-..135.......*.........+........859...454................*....&........ -.................*............*.....@.........927.@738......925..797..............503..618.............=.....................562.643........ -......546.358.281....247/...831..........977....*.........../....*............553.....*.....994.343......................880...........-949. -..721...@..........................305........590....410..........94.296......*......19....*..............202......88+......-............... -....*........590..................%....542..........+..................*......582...........229..................&......-........273..585... -....623.......@.............771........=.........+.........737&.......683...............*.......*.......613...769........849......*..@...... -........722.....571..725.....*.................758..........................209...584...162..826.246......*..................212.487...774.. -....352.........*...../......269.669.....................527..537...........*.......+....................649......368....251*............... -165....+.708.675..79.....408...........612.....&.........+......%..244@....399........912...364-..............17.....................547.... -...*.....*........=.....*.................*...551......+.................................*.........726.257...*..............623..839.*...... -.478.....768..........935.......194..813..890..........290..911...261..........698..450...340.........*.....361..280...............*........ -..................820.......548*...../............................*...941$.......#....*..........................*....406...........621..... -....@.672.............177...............868..716..965.............246..............444...%164.....................44.@......931............. -..540...#.74.............*.....875...90*......*.....*..962................................................107@.............................. -...........%.791.......95.........*..........166.$.....#......615*470.......333/....73........5..449...........@.........................896 -....227......*...582%......17#....................703.....@...........................*.733...*...../........216.495........383*289......... -...#.........255.................%.......&...434.......270.....712..................628..+...893....................-.280................... -...................171..750.......312....733......%............./......*887...@............................................................. -327..+295..700@....+......=.....................158.................357.......930....................645..........399....149...-......716... -.....................966.......378........................96............576.+................58.....+.............*.........*.114.....-..... -....46$....................776*.....522......................$.........*....70.....534.......*..990........892...556.....131................ -.............98....-.587........697*..../729..@...352....688..987....647.......974.........706....*..........%.............................. -...47...498.....121.../.......................218..*........*................-...%..647*.......808................&...../...647............. -..../.......................880...996.............351.$...276.......937*636.4...........75...................502..43.156.................... -.......141..140......-..976*..........................853.....=402.........................487........648+../..............*124............. -..........+...*...868.........*....158.....559.......................128.....476........@.-...................@..986....729................. -..............663..............114.*...363*........909*961...........*........*.......897....$.............678..$...............725......... -..886.329..................324.....722........287..................$.81....166.............555.929..................414.............292/.... -.....*.....$....947..767...-....................*.......527..111.293.............726...........*...553....../665.............950............ -171........937......*........751.................993...../....*...........915......=......651.519.....*..........426...21/..*........907.... -...*560...............................217...................347...429.......*.........50...........293.......160*.............*698..*....... -..........49...................55.....*....130......305@..........=....459..141.380*...................920........501......432......301..... -211*......*...................*......29.......*...........586.............*.........866...............*..........*.......................... -....766.102.901.....*...........696.....@.....179..969......+.............513............840#......#...639.....102.......................... -..............@..366.710.$545....+...654...........*............133.............209...............675................41........122.......... -.............................................430*...75..........*........889..............761.702..........*379...............*............. -...958...905..........*718....*932......585............650...689.....177.....840.........*.......*......869.............107...170...526.912. -...........$.......268.....812.........../...941..........*......893*........*.........971..614..452.........207.......*...............*.... -.293.............................286.........*.........432............*83..499..682..........@................=.....257..........520.....977 -.....767...711..$683......*......*..........419.625#...........788.549............+.712........411..946.........@........................... -.......*....=...........58.991..412.42.222......................*.......79..978.....*............%.*........*58..389......616.........686... -....131............67.......................995............926.561......*....*....406.273...........490..611...................634$......... -..........908.320........................................................725.533.......*...624.....................198*246.209.........#.... -............*...@....594..298....743...601......123......@......@606...$..............439.$.....#....../175...386.............*......490.... -...16....371........*.....-........*...........=..........202..........373.....6.749............28................*....675.....529.......... -...#.............662...............422.............&.......................462....*.........139...........175@.....376.+.................... -.......................+..@325...........18.....543....................../....%.699.....611*..........240................................... -...............297...754....................................15......790..785........474.................+.........-.......719.....962....... -198*...........@..........252...................413...*800......@................./.*...............951...@899...748....#.....486*.......... -....295....334....900.......*..................*....37.........306..............263.737.......722......-................651.............679. -...........*.....=.......150.......535.531....609..................287.....@.................*....519..............92............*8....*.... -904......139.........995.......@..*.......*.*.....933...229........../...45.......361.206.....37.*..........730......&...226..585......553.. -........................*...276.......$.435..582..@.....*........185...............#....*.559.....471..........*...........*......974....... -......285..........493.61...........81..................844.......*.......424........330..*.....................342..994.222.......*........ -..492*.....456*326..*....................728....705.............973.........*............313.554*......596............*.........288..958.... -.....................247..........*508.....+.....*.....#...................789.....................861*................936...........#...... -.589....368......956.......#...469......................757..361....144*..................................=......*.......................... -........-.......$....80.822........560...........172....................212........=552..*.....#....%..858...462.739.....343........22...... -..........=........................*.......170..*..............................413.......368.264.622...........-............*........*...... -...601..505.234.&371...........123.............739.812......429.................%...788....................................277..967...170... -....*.......*........547...........%.....849........*......*.......532...309@.........*..................536....581...352.........-......... -.....840.....636.996*.......399.....455..............35.723..934..*............842...875....90...........*..............*...992......@...... -.........817...........#462....*............$788................*..615.469........*...........*..261.....774.........830......*...624....... -.........*..................607...............................117.................532...............$....................950..676........... -..749*12..558..62...+199........492......870.....719........................548.........353......................486.....-........698*61.... -..................................-..514*....25@...............681..*975..........*437....*....99..............@.*.........+................ -....363...296.....350.............................457.....421-....*.......*234.980.........339.#.............660.443...$.645.132.....930.... -........$.....*....*........617.........712.......*..............122...237............491........../452..............445.......#.342...@.... -........903.422....854.643...*......942...*.......334................................*.......855*..........507....................@......... -.326...................*....426.838.*.....948...................868...635....635.....401.........810.........#........887...40.......743.... -............879......889..#.........252.............496....*...........#..........55........370..................39..$.....*....331..*...... -..506......&...............487..............794....*.....55.................262.....*..465..*.............309......=.......460...*..431..... -.....#............................*......41.........911........./.495.....................*.241..........*....509.....314.......329......... -...............627....15.706...277.276........................68.............*.........................491.......*........#898......%956.... -...........830....*12..*....*.................219.112......................952.....637*........-..539..........999.316.2..........%......... -....../.......*.......132..577.595......426..*......*.3....#380.......681+...............460..829.*..................=.....223.....615...... -......726...811...........................+..91..980..*........................$..........*.......639..................193.%............403. -...................358*............633................526....266.........666...534.....662........................+.....$.........758...*... -.......=.......137.....313.........=.............998......&....*..........*.....................559..313..825=.....353....405.........296... -....447...........#...........342....%.....%........*..938......238.....327..............*152......@...*...................%..472.153....... -.............152#............*......792...334......741........................570*....335..............137..........338..........*......+... -952.........................................................793......583..........623............11........730............50.116.........446 \ No newline at end of file diff --git a/input/day04.txt b/input/day04.txt deleted file mode 100644 index ad930f0..0000000 --- a/input/day04.txt +++ /dev/null @@ -1,220 +0,0 @@ -Card 1: 82 15 37 75 85 51 99 18 17 2 | 8 17 54 14 18 99 4 85 51 49 91 15 82 24 75 25 69 61 52 58 37 87 2 22 28 -Card 2: 67 26 84 63 48 73 36 94 89 65 | 36 94 96 65 89 87 12 26 81 82 77 99 40 63 6 73 55 48 10 69 59 78 24 67 84 -Card 3: 57 44 28 69 45 17 48 62 93 89 | 44 92 33 24 40 43 89 94 62 19 78 87 70 28 57 14 74 32 80 18 8 85 79 9 71 -Card 4: 74 18 96 80 53 40 72 89 26 84 | 77 53 50 72 88 27 46 26 74 89 39 79 90 57 81 80 92 84 64 21 42 45 76 40 18 -Card 5: 90 53 63 16 45 84 80 86 71 36 | 84 57 67 63 87 36 78 1 53 51 26 90 58 71 86 44 11 30 47 95 16 55 45 80 15 -Card 6: 27 87 77 39 1 33 65 66 5 4 | 43 62 41 11 89 97 55 45 56 69 22 96 84 21 94 47 24 32 3 65 63 85 98 95 93 -Card 7: 86 98 87 80 36 41 3 2 29 96 | 41 28 86 54 80 21 55 2 73 53 98 33 5 3 20 45 83 71 42 87 36 46 96 29 60 -Card 8: 25 12 79 16 57 82 5 15 58 52 | 16 86 55 71 76 47 97 8 60 45 70 73 83 69 38 95 3 53 18 84 87 22 19 11 74 -Card 9: 55 81 25 96 64 56 8 46 42 41 | 46 64 32 47 90 66 73 71 96 99 25 26 14 42 63 81 75 56 55 7 51 92 30 41 31 -Card 10: 8 58 13 23 54 71 18 51 89 10 | 89 64 93 34 70 15 48 67 86 51 38 13 28 78 58 9 95 5 22 57 18 11 99 8 23 -Card 11: 94 12 72 82 3 6 41 91 30 89 | 48 47 26 99 62 57 67 28 1 84 32 20 96 14 78 59 22 95 53 85 8 90 87 40 49 -Card 12: 45 74 54 7 1 42 76 5 46 63 | 47 42 9 62 76 74 98 63 44 6 72 2 24 5 70 18 88 7 33 89 46 1 23 58 95 -Card 13: 10 87 14 75 81 49 2 62 54 99 | 80 53 19 44 22 35 86 3 64 10 69 88 84 56 58 77 30 94 96 59 1 28 37 34 57 -Card 14: 49 26 38 79 19 25 92 45 37 86 | 29 91 89 21 14 76 99 72 4 48 61 7 80 1 43 13 58 39 36 57 34 5 77 83 71 -Card 15: 67 13 19 73 3 92 99 9 40 97 | 85 8 51 41 87 26 61 69 11 67 75 40 77 74 66 16 58 9 90 19 83 50 92 7 44 -Card 16: 5 45 86 13 16 18 91 85 84 50 | 64 95 33 63 77 66 57 52 48 96 20 90 67 70 82 17 91 9 6 12 44 76 62 26 60 -Card 17: 80 59 74 57 46 76 73 48 7 69 | 13 65 21 40 53 39 43 79 31 92 67 27 6 22 24 90 63 4 51 47 9 8 11 42 45 -Card 18: 26 70 28 46 45 87 21 60 15 30 | 84 40 52 65 41 4 48 33 54 19 94 49 56 64 6 69 67 31 68 24 32 5 1 25 85 -Card 19: 52 38 95 83 86 40 46 54 29 68 | 22 9 59 60 36 82 70 13 30 3 81 18 64 93 25 66 35 16 85 80 45 72 5 98 51 -Card 20: 53 82 57 94 71 84 26 50 14 37 | 59 77 1 6 17 22 18 72 29 25 2 81 4 56 9 60 8 52 42 43 86 55 19 66 61 -Card 21: 8 97 45 69 62 86 46 21 84 92 | 29 70 77 19 54 56 87 15 65 99 26 16 60 5 39 13 42 74 96 88 7 33 4 58 44 -Card 22: 90 87 47 36 10 68 25 34 37 57 | 4 9 65 68 45 36 47 37 87 66 95 57 41 84 21 34 64 25 60 10 90 94 75 81 26 -Card 23: 15 28 8 13 86 91 84 71 29 48 | 40 42 26 48 76 77 91 82 4 53 16 25 8 20 13 44 15 86 29 73 64 99 49 87 58 -Card 24: 11 86 44 7 85 95 19 28 41 62 | 87 41 44 90 7 3 19 71 28 31 95 48 30 86 76 62 11 46 85 39 35 96 77 55 18 -Card 25: 10 66 15 54 87 94 41 64 69 88 | 89 58 68 7 29 59 71 46 53 99 39 64 34 52 79 22 94 2 83 15 33 41 36 13 21 -Card 26: 12 45 26 34 63 70 95 80 3 9 | 76 95 65 72 18 90 19 84 61 87 41 85 3 9 17 49 44 4 45 2 57 8 51 97 26 -Card 27: 91 88 82 25 94 28 55 67 75 81 | 91 94 88 55 87 86 70 9 75 25 29 14 13 84 67 24 56 81 64 23 82 50 39 28 33 -Card 28: 1 12 91 3 21 13 26 79 89 73 | 54 73 70 2 67 10 46 72 4 91 49 26 13 47 89 3 81 71 32 12 82 84 20 1 79 -Card 29: 9 74 67 81 48 49 51 43 89 12 | 22 12 33 31 9 90 88 81 77 2 3 74 61 21 26 57 49 11 40 35 70 95 67 79 43 -Card 30: 54 81 19 21 53 75 70 30 48 42 | 26 96 56 70 42 2 54 65 40 53 75 35 19 95 21 25 31 41 22 5 30 47 11 52 10 -Card 31: 70 44 14 22 41 19 4 61 51 47 | 8 60 66 16 87 17 85 32 63 41 37 65 35 1 80 19 67 77 39 12 58 64 89 43 73 -Card 32: 29 78 33 58 95 27 26 88 3 74 | 95 6 28 90 73 50 76 58 67 78 29 44 81 49 63 24 88 64 25 82 74 75 31 56 27 -Card 33: 1 2 22 25 16 42 18 70 14 43 | 73 88 80 91 49 53 34 13 75 1 36 5 24 43 63 31 93 42 67 94 74 30 8 14 2 -Card 34: 61 93 15 19 54 80 8 10 29 31 | 91 3 74 71 55 78 39 76 98 11 46 97 86 24 33 83 63 72 40 43 41 5 88 79 13 -Card 35: 7 66 28 68 54 62 21 71 97 55 | 30 2 17 23 60 20 42 81 41 32 37 96 59 47 19 70 14 38 83 50 56 16 48 58 3 -Card 36: 51 84 65 26 4 1 29 98 38 2 | 60 67 24 76 99 79 31 34 13 83 6 68 53 43 77 98 49 90 75 21 19 51 70 40 48 -Card 37: 23 49 47 78 7 91 79 54 87 41 | 10 45 76 33 34 61 16 30 71 67 11 95 57 92 18 94 66 73 28 50 20 85 87 8 2 -Card 38: 80 15 34 32 36 58 25 64 29 76 | 81 97 87 90 44 17 99 20 65 89 79 86 88 12 59 82 95 9 69 27 51 47 3 52 1 -Card 39: 32 63 5 33 18 78 45 30 48 85 | 6 93 69 8 7 40 36 58 91 13 15 97 46 74 49 89 92 88 34 23 59 90 20 86 28 -Card 40: 84 75 20 38 61 40 39 31 73 32 | 9 10 7 31 86 34 38 90 67 42 61 81 23 32 64 72 20 26 76 49 40 75 73 12 18 -Card 41: 5 27 41 42 64 21 74 62 80 88 | 17 73 81 6 7 45 61 18 86 77 19 51 15 44 47 48 90 32 95 54 2 89 58 35 30 -Card 42: 70 91 14 36 81 64 11 79 73 16 | 25 52 87 62 5 50 96 61 63 35 16 9 21 4 98 29 45 73 32 67 71 22 28 48 66 -Card 43: 21 14 41 55 36 94 24 71 32 64 | 13 37 90 25 96 4 79 72 98 57 83 35 65 30 11 78 75 14 21 24 66 38 6 69 34 -Card 44: 46 14 17 79 88 89 91 94 18 57 | 75 32 51 20 6 48 12 36 77 78 8 95 62 26 91 47 96 44 71 93 61 94 55 81 10 -Card 45: 7 67 29 75 52 47 13 57 1 22 | 94 57 22 52 72 74 63 60 39 89 6 27 71 36 8 7 84 75 58 50 83 3 9 16 12 -Card 46: 59 22 81 73 18 71 24 25 60 98 | 91 98 35 2 57 7 22 43 4 49 59 96 79 36 56 88 99 15 60 89 80 6 10 45 34 -Card 47: 94 79 46 19 10 17 95 58 67 32 | 82 22 12 35 84 67 9 11 19 92 52 8 76 95 32 46 10 42 39 33 64 36 61 21 24 -Card 48: 26 59 37 67 7 34 46 32 17 78 | 6 26 10 5 24 84 41 13 78 36 12 91 80 52 31 11 59 40 19 46 45 43 29 30 18 -Card 49: 69 52 64 35 82 38 66 6 56 81 | 74 6 57 42 58 31 41 12 89 49 32 77 90 71 34 94 54 25 1 26 64 24 78 59 4 -Card 50: 70 88 55 32 45 93 52 85 64 40 | 66 68 79 59 89 85 3 57 86 43 27 51 7 50 88 63 23 36 24 31 17 61 47 94 80 -Card 51: 32 98 8 85 76 73 78 1 95 83 | 60 75 53 42 36 30 91 40 64 50 35 25 55 34 62 5 10 48 87 54 74 4 17 73 37 -Card 52: 76 69 72 77 13 52 9 67 86 32 | 63 58 98 29 23 49 94 6 40 62 72 24 88 93 51 37 55 69 97 12 80 33 74 53 48 -Card 53: 96 61 98 3 41 52 94 42 68 78 | 8 21 55 65 2 43 76 5 89 7 51 67 87 75 48 1 38 12 30 59 33 17 92 58 53 -Card 54: 68 82 48 53 43 6 45 41 8 80 | 96 79 5 88 66 32 86 39 84 1 49 34 89 16 56 11 28 13 35 12 62 23 59 78 57 -Card 55: 54 72 92 73 7 8 30 16 41 47 | 23 98 70 9 16 30 84 8 34 7 38 80 47 35 52 73 92 19 72 69 87 88 12 41 54 -Card 56: 71 91 25 2 44 5 62 93 48 66 | 58 91 65 90 18 39 93 53 2 56 79 85 48 5 67 94 62 66 55 25 71 89 44 80 87 -Card 57: 13 16 76 81 99 90 5 95 45 66 | 3 57 89 50 61 35 85 44 62 18 95 99 23 30 83 97 94 20 37 53 74 15 59 48 22 -Card 58: 65 33 4 9 13 60 44 89 67 30 | 13 6 26 92 85 1 56 96 61 40 63 9 53 57 68 88 52 69 33 64 4 89 31 94 75 -Card 59: 13 44 38 18 33 3 30 79 89 92 | 82 88 26 92 73 13 20 33 99 98 44 30 18 91 39 3 67 89 31 79 24 87 61 38 52 -Card 60: 50 43 29 47 42 22 23 31 57 79 | 63 90 99 13 52 58 76 95 51 79 42 47 94 92 97 43 50 5 44 22 57 96 29 23 31 -Card 61: 85 79 17 31 99 87 70 97 13 14 | 42 67 58 36 34 5 38 56 93 45 16 75 10 39 28 54 61 87 55 30 59 32 98 23 86 -Card 62: 73 76 16 36 83 6 25 92 19 58 | 25 83 58 92 72 29 19 16 93 73 32 74 82 2 24 65 6 69 36 78 66 89 76 44 26 -Card 63: 53 13 31 41 12 22 2 6 43 46 | 42 41 53 21 27 12 31 13 59 30 46 34 65 83 54 14 1 9 75 73 50 43 79 70 63 -Card 64: 79 63 31 60 96 37 46 44 43 56 | 73 34 88 91 78 39 36 37 80 2 56 79 98 28 93 70 96 86 63 7 89 17 60 30 5 -Card 65: 60 67 51 96 54 93 52 35 91 39 | 16 7 54 76 96 21 93 77 67 2 95 60 1 46 42 91 79 35 48 51 71 37 39 52 55 -Card 66: 81 78 23 99 29 56 11 43 48 79 | 75 56 23 79 88 10 78 21 93 44 25 86 29 87 94 11 43 26 92 51 81 99 72 48 91 -Card 67: 29 23 59 71 21 88 72 95 85 64 | 61 70 8 9 83 7 78 27 60 15 22 35 96 47 86 42 37 11 77 18 85 24 19 63 31 -Card 68: 78 93 53 29 59 73 45 4 1 58 | 72 4 63 93 59 45 67 73 87 58 29 12 81 53 78 76 71 21 50 92 1 62 16 5 66 -Card 69: 91 56 62 48 26 97 31 80 88 53 | 46 43 6 45 14 91 33 5 19 48 68 81 17 64 12 40 56 74 50 25 26 72 73 13 67 -Card 70: 62 5 28 14 42 94 48 2 54 26 | 28 66 46 33 75 63 89 59 38 87 90 83 29 49 3 15 85 6 40 58 32 82 25 76 8 -Card 71: 17 45 55 58 64 19 87 76 47 10 | 91 85 7 65 10 84 36 42 57 62 96 1 3 55 72 30 17 64 82 81 93 69 99 18 53 -Card 72: 65 50 62 51 97 93 49 54 38 92 | 30 7 51 54 13 72 11 20 79 61 40 9 53 17 33 92 47 43 83 45 32 67 64 39 55 -Card 73: 29 83 63 46 2 86 81 56 57 69 | 78 81 34 90 32 9 95 93 85 22 80 49 37 65 74 51 68 46 38 43 83 86 92 44 87 -Card 74: 50 59 88 81 25 93 70 41 45 72 | 20 48 16 32 51 52 66 30 40 38 99 37 63 44 10 17 58 68 19 97 83 1 95 46 23 -Card 75: 86 92 53 46 5 49 17 48 25 76 | 53 15 75 96 51 69 37 66 95 83 49 54 78 64 33 98 99 34 12 58 60 23 89 84 13 -Card 76: 9 11 30 34 33 58 19 64 56 17 | 52 95 77 24 60 37 49 42 71 45 57 94 15 65 13 83 99 97 78 91 44 2 84 96 62 -Card 77: 28 44 49 36 30 90 72 8 54 82 | 12 19 16 98 15 70 77 66 94 59 79 91 85 96 18 29 50 5 78 3 10 46 41 35 43 -Card 78: 27 35 75 20 56 49 29 60 70 78 | 85 58 61 83 94 16 9 97 92 39 59 18 1 51 77 55 79 33 68 43 47 69 31 19 89 -Card 79: 5 75 99 55 95 80 20 50 61 29 | 9 90 59 35 34 82 6 72 86 2 88 3 83 93 46 57 40 63 19 52 39 77 36 79 94 -Card 80: 24 72 45 43 22 3 20 93 88 37 | 19 3 93 28 92 42 72 37 89 20 24 7 88 65 45 22 5 15 35 41 40 1 11 43 36 -Card 81: 56 37 74 19 63 14 72 54 35 58 | 15 58 33 50 4 29 14 35 38 19 65 71 7 44 86 16 84 46 36 88 56 89 78 13 31 -Card 82: 74 46 78 2 86 24 12 63 95 43 | 2 42 44 12 11 23 47 10 9 63 30 38 15 35 4 49 43 37 85 84 25 34 95 71 80 -Card 83: 60 16 23 37 54 75 6 70 20 64 | 69 88 41 15 60 83 23 14 58 49 75 70 16 32 54 37 9 20 34 64 47 33 6 66 31 -Card 84: 52 11 25 21 95 32 94 80 70 64 | 68 32 26 3 40 11 33 75 60 25 96 6 35 70 86 80 64 95 37 17 21 5 94 52 54 -Card 85: 93 59 35 62 43 50 4 10 65 66 | 42 67 18 3 13 34 59 65 11 24 91 32 43 87 66 56 12 97 35 75 37 94 5 71 93 -Card 86: 89 8 5 59 46 77 26 15 30 24 | 26 3 96 41 35 94 24 93 20 59 77 86 15 46 8 17 1 5 30 98 55 89 9 43 85 -Card 87: 43 59 21 29 54 33 78 67 47 44 | 47 96 44 65 80 67 20 33 78 49 29 70 54 53 51 81 66 34 38 2 52 23 26 61 88 -Card 88: 40 2 12 90 56 6 53 98 97 18 | 12 29 56 37 13 79 63 70 45 11 41 6 2 87 75 90 40 33 98 97 53 74 16 18 58 -Card 89: 92 96 75 73 19 46 70 59 60 38 | 39 22 96 24 23 35 99 97 30 86 33 55 36 66 59 85 19 54 88 8 3 73 78 47 62 -Card 90: 66 4 84 39 35 89 58 99 75 26 | 89 70 34 98 45 75 22 95 31 4 64 84 51 32 44 6 39 26 47 69 18 17 35 58 13 -Card 91: 94 50 90 58 37 17 57 27 95 78 | 58 70 19 84 11 39 30 87 52 25 15 51 76 56 75 45 7 32 16 82 17 18 94 38 69 -Card 92: 10 82 70 9 53 65 5 52 92 15 | 59 86 33 17 47 77 4 73 70 45 92 75 28 85 96 31 49 3 78 55 67 29 94 8 80 -Card 93: 28 96 39 25 56 92 71 67 38 17 | 5 79 52 43 88 67 51 74 17 62 2 48 26 64 21 69 84 57 13 53 99 1 56 25 71 -Card 94: 94 9 39 62 92 2 86 34 35 21 | 19 81 55 30 5 41 94 74 40 49 31 4 17 3 82 85 78 45 38 36 20 1 24 70 71 -Card 95: 41 67 23 14 37 51 25 75 54 9 | 44 47 1 88 17 79 68 60 74 72 11 38 70 28 91 41 63 64 51 2 3 6 92 53 86 -Card 96: 72 28 58 55 99 52 87 43 53 36 | 41 42 44 78 62 67 71 69 1 63 76 24 66 68 28 98 16 21 49 80 51 81 23 15 48 -Card 97: 29 18 25 85 6 49 93 32 88 82 | 25 12 27 81 99 93 82 67 24 64 84 74 4 88 21 53 75 41 94 3 83 85 10 70 91 -Card 98: 58 51 79 10 86 7 11 67 26 99 | 64 80 25 51 11 36 99 49 17 85 16 50 65 31 57 92 2 73 94 79 75 83 59 14 6 -Card 99: 99 90 86 72 54 22 43 29 10 49 | 55 6 48 25 10 92 72 19 77 50 36 16 17 47 58 22 24 8 31 34 51 45 39 95 98 -Card 100: 22 74 77 49 4 95 63 44 52 56 | 7 86 3 46 26 23 78 97 43 16 91 30 92 77 18 51 41 15 1 21 19 61 88 14 27 -Card 101: 81 84 44 75 8 55 29 67 63 34 | 1 20 28 46 36 82 60 27 62 69 40 18 87 91 74 66 6 38 15 21 45 17 52 78 37 -Card 102: 78 42 39 61 80 30 81 52 60 57 | 27 54 25 48 37 93 41 92 84 2 67 91 94 26 51 29 14 7 98 62 74 65 8 24 1 -Card 103: 7 78 29 89 99 4 49 91 34 26 | 4 26 76 90 49 47 86 41 72 29 7 91 58 96 30 69 3 53 89 78 85 99 70 8 11 -Card 104: 81 36 16 63 66 71 98 2 49 54 | 2 71 81 51 88 58 46 89 67 18 10 49 77 63 7 36 98 21 94 60 66 16 17 54 25 -Card 105: 3 31 41 65 52 14 53 5 67 32 | 86 1 79 41 31 25 63 4 53 92 50 82 52 5 56 34 71 3 65 32 67 14 95 60 64 -Card 106: 89 41 20 96 90 37 95 93 49 46 | 96 97 65 95 39 41 2 26 93 89 3 85 99 77 31 46 15 49 75 27 34 32 70 72 6 -Card 107: 9 41 39 98 64 97 47 21 58 73 | 97 29 45 92 94 73 8 9 98 84 21 4 87 47 64 24 12 41 39 44 81 72 71 78 58 -Card 108: 94 61 24 91 52 38 40 7 97 86 | 7 21 69 48 44 56 1 20 25 88 77 67 93 34 76 61 52 64 33 65 17 95 92 24 6 -Card 109: 31 87 17 94 4 50 84 69 46 67 | 3 79 14 77 19 42 56 26 40 38 89 94 11 68 21 1 74 28 59 17 54 51 76 23 70 -Card 110: 16 75 19 42 36 73 87 8 40 38 | 62 75 19 36 21 74 20 42 25 66 95 73 38 79 50 16 5 96 87 68 48 40 8 12 18 -Card 111: 77 16 69 73 53 82 55 68 84 70 | 5 53 2 84 85 68 31 67 15 82 73 70 55 45 77 89 79 91 90 18 10 69 41 16 27 -Card 112: 42 44 21 67 65 64 7 12 61 29 | 78 42 54 21 5 53 64 44 61 75 8 79 90 67 85 7 12 99 24 93 65 36 29 32 16 -Card 113: 8 71 21 46 93 30 9 52 36 75 | 93 63 16 70 75 52 68 47 51 34 36 46 60 21 29 30 9 54 84 8 92 74 71 55 82 -Card 114: 20 34 26 5 48 49 32 16 51 89 | 26 32 89 9 81 34 59 49 98 44 96 30 2 78 41 67 51 70 25 75 20 3 48 5 45 -Card 115: 2 78 24 3 84 4 99 40 15 76 | 24 41 62 45 43 13 19 4 36 64 81 42 59 71 21 73 55 77 67 72 70 96 65 40 29 -Card 116: 42 3 62 38 70 95 89 41 96 8 | 86 6 59 52 96 13 73 48 35 50 10 77 33 5 74 78 69 81 31 1 89 46 65 3 2 -Card 117: 92 40 30 75 82 58 50 72 60 78 | 59 55 85 40 17 72 45 94 71 83 65 66 10 98 39 43 2 75 49 30 82 84 38 1 60 -Card 118: 34 85 64 52 3 50 25 92 2 87 | 55 62 53 88 28 92 65 38 19 56 43 26 79 24 74 84 59 73 31 80 14 94 48 34 9 -Card 119: 52 17 18 20 2 50 57 45 92 30 | 73 20 19 40 99 30 48 15 2 47 77 26 11 17 49 92 62 50 57 97 25 66 44 67 4 -Card 120: 16 75 2 22 44 82 91 79 99 7 | 71 11 10 23 88 68 69 47 43 9 56 8 37 46 80 24 33 57 59 78 22 90 82 29 6 -Card 121: 9 1 71 29 66 80 44 89 73 15 | 70 80 11 9 89 31 96 22 51 40 15 77 92 18 71 1 55 97 25 41 10 90 7 65 99 -Card 122: 63 3 60 11 23 22 28 18 98 90 | 83 96 74 16 64 56 5 61 65 37 89 73 97 49 46 42 35 1 91 77 29 7 13 87 10 -Card 123: 80 6 17 94 30 79 89 21 2 12 | 78 37 88 83 79 77 48 14 62 18 27 6 61 1 35 87 12 38 26 47 9 54 94 16 73 -Card 124: 12 13 4 20 87 75 51 59 90 83 | 76 33 70 79 85 86 21 35 15 67 88 60 47 73 50 18 55 97 29 37 44 57 69 42 84 -Card 125: 10 51 74 85 9 42 73 45 13 37 | 88 24 4 51 64 80 8 73 92 32 33 70 61 29 95 15 6 79 91 58 31 7 26 11 53 -Card 126: 99 91 38 56 49 39 82 35 23 43 | 17 70 5 36 50 64 4 8 14 12 10 41 74 69 32 75 86 59 34 37 33 55 46 80 27 -Card 127: 45 52 11 95 69 51 86 96 65 91 | 36 14 85 10 21 67 87 71 25 41 53 30 60 13 90 19 40 61 22 31 49 38 58 84 89 -Card 128: 11 49 19 60 55 20 74 31 24 89 | 93 22 19 88 74 35 11 98 80 71 60 26 3 84 20 64 55 68 24 92 28 49 41 89 31 -Card 129: 88 91 87 40 76 83 94 14 19 38 | 39 76 40 14 3 61 48 72 38 6 82 88 53 31 93 87 2 46 19 83 36 94 91 22 90 -Card 130: 77 99 31 39 81 87 57 65 2 22 | 80 30 53 87 49 77 31 64 88 71 42 57 73 75 39 94 65 99 24 96 81 22 18 84 2 -Card 131: 43 46 87 1 89 74 35 18 19 78 | 77 30 66 71 84 28 41 7 60 40 42 87 18 27 57 32 46 97 3 79 63 69 78 89 1 -Card 132: 97 48 86 60 10 82 36 3 4 44 | 36 70 57 18 87 86 48 75 2 83 88 12 28 97 78 1 72 84 60 47 4 37 26 32 66 -Card 133: 64 42 96 61 21 22 11 68 28 49 | 50 64 41 70 58 22 10 28 32 18 78 49 16 11 21 56 61 26 13 68 42 37 30 82 96 -Card 134: 52 34 62 86 74 65 16 68 78 97 | 71 31 30 47 2 97 12 27 49 38 23 83 90 16 89 35 19 82 91 60 6 26 99 41 17 -Card 135: 83 49 31 8 52 22 7 46 40 77 | 95 7 52 28 35 91 19 14 77 16 34 44 39 3 68 26 41 71 31 10 4 13 43 72 1 -Card 136: 41 57 29 85 44 60 30 5 7 87 | 41 47 88 97 50 10 95 30 29 57 60 9 53 7 18 81 85 5 16 33 87 44 55 80 3 -Card 137: 26 35 75 13 18 90 99 27 29 39 | 21 42 86 20 48 64 95 55 8 91 16 37 71 65 98 5 77 39 63 46 10 14 45 82 28 -Card 138: 97 7 1 70 23 14 51 63 88 17 | 23 6 68 19 41 80 88 63 29 93 92 25 65 27 90 30 1 51 38 43 70 84 97 53 22 -Card 139: 99 96 93 5 31 86 38 83 45 60 | 16 44 30 59 28 29 78 97 85 26 12 5 55 62 34 82 17 49 7 74 91 51 77 15 42 -Card 140: 95 59 97 77 9 48 18 36 15 19 | 7 6 28 84 15 17 5 14 77 39 65 38 51 29 59 21 33 95 18 32 55 90 97 36 49 -Card 141: 93 47 42 2 74 38 3 60 62 15 | 67 28 46 54 75 51 26 80 82 94 34 9 45 17 2 35 30 16 42 90 68 71 64 70 76 -Card 142: 7 59 70 82 42 35 34 41 22 45 | 47 19 82 72 87 89 44 21 22 39 95 43 14 77 88 20 29 41 7 50 65 49 35 15 45 -Card 143: 2 75 38 31 94 32 74 7 33 76 | 92 95 27 19 66 57 36 55 77 65 15 61 22 2 99 23 34 33 46 31 74 40 52 48 96 -Card 144: 36 69 46 39 45 35 83 48 98 51 | 18 7 61 53 38 25 8 63 27 86 41 88 32 91 85 71 49 95 47 2 24 78 97 64 87 -Card 145: 83 59 85 72 62 98 39 99 70 53 | 8 29 9 61 65 69 77 80 90 53 14 76 12 31 48 34 2 97 66 54 27 91 62 94 18 -Card 146: 5 37 56 24 7 6 17 44 84 21 | 67 24 88 53 38 31 48 42 9 11 5 72 52 35 98 65 91 85 86 29 37 64 7 12 63 -Card 147: 70 68 58 36 56 18 23 76 93 4 | 54 88 30 76 12 3 84 75 63 47 94 19 11 83 43 26 27 2 36 14 99 82 41 8 24 -Card 148: 25 3 69 75 27 96 29 4 19 99 | 50 83 21 14 18 78 16 49 86 22 45 15 85 52 13 54 79 10 5 31 82 37 43 72 19 -Card 149: 84 14 37 49 22 63 1 15 76 32 | 56 68 4 39 54 36 13 72 8 95 2 90 26 21 61 81 75 53 52 55 18 25 60 29 42 -Card 150: 17 7 44 83 13 1 61 68 76 11 | 45 85 30 56 86 31 82 16 35 59 99 32 57 79 69 3 10 39 66 12 9 97 46 14 58 -Card 151: 72 23 42 84 75 31 47 80 46 15 | 80 94 86 46 79 90 42 84 7 31 47 24 99 25 23 16 32 97 55 72 67 20 19 15 75 -Card 152: 48 75 49 87 35 95 71 54 13 10 | 22 7 31 21 53 45 18 73 42 19 50 78 82 99 93 43 17 66 15 77 29 16 44 34 63 -Card 153: 58 25 5 97 63 70 21 28 11 65 | 25 85 38 69 15 5 21 67 83 28 98 63 47 56 7 70 66 97 57 58 11 22 65 96 95 -Card 154: 56 88 25 12 31 53 33 46 87 17 | 17 52 83 75 28 53 87 12 62 51 27 34 13 54 46 56 73 10 92 4 6 33 35 24 84 -Card 155: 61 33 68 37 44 86 6 73 43 81 | 64 89 27 59 56 25 83 75 5 9 21 93 32 18 77 84 71 99 2 17 88 61 4 34 76 -Card 156: 95 20 25 40 81 50 10 97 37 64 | 87 65 67 79 60 76 59 47 62 26 83 20 77 73 38 15 58 19 66 93 88 39 29 24 78 -Card 157: 17 13 48 39 83 36 57 56 92 22 | 17 96 22 64 60 52 13 83 57 72 39 48 15 78 6 12 84 4 30 93 36 10 77 56 92 -Card 158: 53 64 20 63 74 66 11 67 56 33 | 16 64 68 60 53 23 8 20 73 66 81 33 9 69 63 28 98 10 96 56 77 11 58 74 67 -Card 159: 34 22 13 14 42 45 98 48 5 76 | 68 20 83 29 74 2 92 6 25 32 8 89 87 46 71 72 39 33 12 21 11 45 95 36 5 -Card 160: 1 41 87 40 65 56 58 35 45 83 | 76 18 45 83 39 52 92 29 24 85 87 40 3 38 35 90 88 70 1 49 58 41 56 65 94 -Card 161: 71 23 75 47 35 86 39 8 70 65 | 75 15 8 60 86 20 74 29 31 70 52 39 42 65 78 7 3 33 47 14 4 76 51 49 22 -Card 162: 45 87 26 33 85 31 49 23 59 24 | 59 13 49 16 3 63 28 22 83 45 17 62 52 68 25 95 24 65 89 80 26 66 77 99 33 -Card 163: 56 77 19 98 36 60 41 5 73 59 | 77 73 54 62 89 59 78 41 5 28 98 35 15 32 19 45 56 21 7 60 87 75 36 38 71 -Card 164: 73 14 1 77 23 35 87 3 52 84 | 23 84 14 64 35 52 3 50 33 74 19 30 15 1 73 9 88 72 81 16 80 87 29 97 69 -Card 165: 68 65 89 28 41 12 29 20 90 99 | 41 3 67 43 12 23 54 25 47 68 92 88 9 16 93 14 89 60 99 69 81 95 50 84 13 -Card 166: 39 79 38 86 52 41 58 26 54 11 | 7 36 80 52 40 4 74 30 88 79 90 26 47 61 55 75 93 95 97 1 8 44 56 25 71 -Card 167: 43 25 19 87 42 32 70 93 35 57 | 85 23 19 16 32 60 22 53 28 89 42 41 97 50 47 24 46 94 57 27 49 13 40 34 90 -Card 168: 74 19 48 42 65 73 59 9 39 56 | 60 48 65 39 66 9 85 18 15 73 13 1 29 83 74 86 76 63 91 50 68 77 2 47 61 -Card 169: 63 93 8 94 25 98 26 96 42 60 | 31 21 5 13 72 45 54 40 99 27 92 62 36 50 4 94 88 28 68 32 3 39 35 79 23 -Card 170: 37 14 91 39 68 72 94 34 29 82 | 61 69 71 2 42 47 22 33 59 9 38 92 65 73 58 95 32 3 88 63 7 24 66 41 26 -Card 171: 74 82 60 17 88 66 63 15 10 5 | 81 83 76 63 16 89 72 46 9 26 90 95 92 97 59 85 4 70 41 78 12 10 79 54 51 -Card 172: 3 26 94 30 43 47 16 48 55 31 | 95 92 91 84 39 64 90 56 18 28 51 12 32 98 21 43 13 14 15 7 71 23 83 42 41 -Card 173: 62 61 48 37 58 72 5 84 73 12 | 7 92 64 44 24 97 86 27 75 79 52 18 65 17 11 33 91 14 25 39 20 50 38 29 89 -Card 174: 57 86 12 16 19 11 63 53 77 24 | 17 91 79 20 50 99 37 9 85 66 42 23 72 18 46 73 55 38 82 75 80 21 89 22 47 -Card 175: 25 20 9 15 6 92 40 93 68 63 | 4 2 34 65 50 68 9 6 93 13 29 25 15 92 20 16 67 63 79 76 53 60 40 55 31 -Card 176: 43 48 37 98 50 44 74 4 58 28 | 71 50 28 22 64 54 65 12 98 37 70 53 84 94 4 48 44 66 68 43 58 29 35 74 18 -Card 177: 75 31 15 80 85 14 2 26 71 10 | 92 87 4 55 11 14 81 89 71 80 98 37 13 95 35 2 85 75 31 3 26 10 18 15 38 -Card 178: 96 97 17 9 91 34 44 89 46 20 | 74 96 17 44 16 37 91 87 63 36 20 47 34 89 46 97 73 82 6 1 90 2 51 54 9 -Card 179: 89 96 72 46 6 98 63 81 93 11 | 95 79 65 30 54 43 98 72 83 34 90 10 94 93 82 64 68 66 9 1 70 40 81 48 53 -Card 180: 48 78 66 98 37 85 12 99 28 50 | 28 71 53 34 50 31 36 48 33 73 37 4 12 96 99 94 25 70 3 38 90 80 86 51 85 -Card 181: 91 99 31 16 35 15 81 77 90 86 | 62 47 82 2 60 49 65 52 53 64 69 23 59 50 72 74 63 7 12 19 26 31 57 87 44 -Card 182: 17 33 69 25 47 70 20 28 10 35 | 57 18 20 25 67 93 35 17 91 32 1 69 33 39 66 19 76 54 10 8 41 47 74 28 58 -Card 183: 59 99 94 23 5 57 79 27 46 73 | 38 47 60 44 73 94 68 46 69 49 54 42 79 13 29 4 91 27 76 80 39 75 66 93 48 -Card 184: 74 66 82 96 45 98 37 95 41 20 | 31 37 48 25 70 43 84 91 95 49 94 6 21 30 34 18 58 85 19 53 40 32 56 1 64 -Card 185: 80 64 51 75 56 38 88 22 58 33 | 32 40 73 95 34 69 22 88 74 38 61 86 43 21 29 53 33 92 4 55 14 81 79 17 56 -Card 186: 17 97 70 51 67 8 88 38 99 69 | 65 22 59 77 57 33 44 19 10 83 86 8 3 25 76 74 53 69 79 11 28 39 21 18 23 -Card 187: 2 77 22 9 91 89 36 95 5 32 | 36 46 24 32 4 30 42 7 73 26 88 71 53 44 14 37 62 3 28 87 48 47 85 64 9 -Card 188: 23 47 57 84 54 7 17 52 63 76 | 11 9 46 88 84 67 38 47 6 95 60 42 1 81 41 54 28 44 2 76 7 37 24 86 32 -Card 189: 38 56 77 87 36 91 20 35 31 64 | 3 94 68 53 66 57 12 77 73 36 76 7 78 31 82 22 48 35 96 50 32 49 41 91 87 -Card 190: 59 14 85 95 97 82 16 37 38 12 | 89 88 44 7 87 21 25 41 27 91 54 3 18 53 26 47 51 84 62 22 23 63 9 4 29 -Card 191: 28 7 5 24 58 15 17 25 41 51 | 39 59 47 27 64 50 1 65 61 97 6 41 54 25 43 91 10 29 32 58 15 69 3 24 96 -Card 192: 67 37 43 30 6 1 13 96 52 2 | 79 57 49 91 47 10 51 14 45 48 17 85 44 86 76 97 21 69 78 90 56 28 74 11 8 -Card 193: 6 97 31 70 50 91 9 51 75 89 | 11 67 64 52 65 71 5 81 49 95 82 7 77 88 96 18 33 80 14 86 15 25 76 34 68 -Card 194: 2 42 27 84 41 17 7 31 11 1 | 35 6 47 39 16 95 21 45 12 34 62 56 85 10 58 63 57 8 27 15 43 22 46 66 81 -Card 195: 92 19 39 62 30 17 26 8 52 20 | 65 28 71 57 82 67 14 32 6 2 4 87 64 18 61 98 44 54 25 5 93 47 75 83 76 -Card 196: 81 20 71 17 83 41 74 87 70 90 | 6 86 43 44 49 88 80 19 99 10 11 26 16 64 40 31 60 55 1 75 54 73 58 42 45 -Card 197: 80 78 57 75 83 33 71 68 50 43 | 98 1 38 97 93 83 89 68 90 70 78 75 51 57 43 44 33 50 84 76 64 56 80 59 71 -Card 198: 72 50 52 53 3 93 59 69 87 75 | 55 4 34 69 73 98 49 64 60 75 52 3 72 87 28 50 53 84 32 99 37 31 91 45 97 -Card 199: 40 59 64 91 14 53 65 74 57 92 | 20 40 94 85 65 93 2 67 57 12 54 42 27 44 74 9 78 64 16 81 76 47 6 14 39 -Card 200: 40 37 95 97 92 10 42 43 29 8 | 40 81 67 35 45 92 90 29 65 97 87 78 66 93 37 19 95 6 88 28 42 22 8 43 98 -Card 201: 59 58 65 35 95 18 36 27 31 8 | 37 58 54 3 59 78 34 93 94 68 16 55 13 42 77 8 53 43 36 82 97 79 89 56 51 -Card 202: 29 79 9 34 18 57 1 27 78 94 | 55 86 98 53 73 79 13 51 29 36 18 11 35 1 44 78 82 33 91 94 9 34 58 57 27 -Card 203: 79 38 40 19 10 29 12 33 61 55 | 79 28 33 21 93 91 61 35 82 4 14 10 81 23 19 55 12 11 62 65 29 77 38 40 43 -Card 204: 16 52 48 96 94 97 65 77 33 36 | 19 23 39 33 25 97 65 73 48 10 47 52 16 43 11 14 96 13 60 62 36 94 64 78 77 -Card 205: 86 53 93 1 63 94 21 64 11 52 | 16 33 66 74 68 43 63 49 84 96 62 21 30 75 24 39 20 54 86 93 52 11 77 61 41 -Card 206: 82 70 30 12 25 55 29 35 5 52 | 56 61 67 53 22 19 91 52 62 24 72 41 66 25 38 11 9 88 79 32 47 21 99 20 18 -Card 207: 92 94 37 87 15 2 98 13 78 88 | 64 58 87 46 88 2 13 20 16 37 19 77 82 35 78 98 85 76 52 27 92 48 15 94 57 -Card 208: 37 68 13 27 22 87 40 58 69 52 | 1 93 60 45 65 63 18 14 19 58 44 79 42 52 55 13 59 46 20 81 97 49 23 80 48 -Card 209: 48 87 4 95 74 15 59 26 41 35 | 65 39 95 76 83 51 6 9 19 62 24 86 12 58 14 71 36 37 40 32 43 67 17 72 88 -Card 210: 31 60 33 7 49 91 62 13 19 12 | 18 40 43 48 17 78 69 60 88 86 98 47 20 5 1 58 19 66 2 35 7 31 33 72 28 -Card 211: 59 30 29 75 32 46 51 83 45 55 | 32 62 91 12 7 4 83 42 56 30 5 31 97 58 34 73 98 61 68 37 8 29 26 88 44 -Card 212: 69 26 50 79 44 24 21 6 42 57 | 71 41 12 73 57 81 97 6 62 98 24 14 18 64 4 54 3 44 76 8 42 90 67 55 17 -Card 213: 66 20 63 16 23 9 31 69 67 50 | 94 20 24 77 15 18 6 59 23 79 17 30 44 42 11 27 53 50 12 47 82 7 90 95 98 -Card 214: 78 31 2 98 24 89 44 8 28 14 | 82 2 79 19 51 30 97 63 5 98 35 84 69 77 78 89 13 44 65 16 71 96 4 33 32 -Card 215: 51 11 37 77 2 20 62 75 58 89 | 78 20 24 81 54 49 43 74 15 8 40 48 3 12 79 59 84 52 7 70 22 6 23 63 38 -Card 216: 13 15 69 5 57 20 77 45 98 12 | 9 42 49 96 46 23 84 77 74 31 75 15 47 6 83 94 35 4 30 87 85 86 10 38 1 -Card 217: 33 92 13 9 53 41 74 86 8 50 | 78 76 73 17 99 39 48 98 89 62 7 11 10 43 49 59 61 75 55 28 21 27 67 70 35 -Card 218: 91 50 80 42 23 76 63 81 29 39 | 57 26 2 3 21 43 52 34 70 91 30 8 12 24 99 94 97 83 9 74 19 40 49 78 62 -Card 219: 63 29 45 94 49 57 24 40 71 99 | 86 37 23 13 67 19 36 69 22 48 20 10 44 59 1 16 52 43 4 2 15 85 74 33 34 -Card 220: 7 42 25 84 54 11 88 6 55 73 | 86 5 82 70 49 80 21 36 16 34 17 77 44 74 61 1 4 39 45 47 3 81 57 60 24 \ No newline at end of file diff --git a/input/day05.example.txt b/input/day05.example.txt deleted file mode 100644 index bd902a4..0000000 --- a/input/day05.example.txt +++ /dev/null @@ -1,33 +0,0 @@ -seeds: 79 14 55 13 - -seed-to-soil map: -50 98 2 -52 50 48 - -soil-to-fertilizer map: -0 15 37 -37 52 2 -39 0 15 - -fertilizer-to-water map: -49 53 8 -0 11 42 -42 0 7 -57 7 4 - -water-to-light map: -88 18 7 -18 25 70 - -light-to-temperature map: -45 77 23 -81 45 19 -68 64 13 - -temperature-to-humidity map: -0 69 1 -1 0 69 - -humidity-to-location map: -60 56 37 -56 93 4 \ No newline at end of file diff --git a/input/day05.txt b/input/day05.txt deleted file mode 100644 index 57d5462..0000000 --- a/input/day05.txt +++ /dev/null @@ -1,183 +0,0 @@ -seeds: 629551616 310303897 265998072 58091853 3217788227 563748665 2286940694 820803307 1966060902 108698829 190045874 3206262 4045963015 223661537 1544688274 293696584 1038807941 31756878 1224711373 133647424 - -seed-to-soil map: -3809825462 2725979505 339457863 -3359244708 2085610478 450580754 -652041572 2536191232 189788273 -841829845 3346349446 343599367 -1408035723 73701258 732851393 -2140887116 3689948813 88205018 -0 3778153831 371129494 -2953980724 0 73701258 -3027681982 1754047752 331562726 -2229092134 1029159162 724888590 -1185429212 806552651 222606511 -371129494 3065437368 280912078 - -soil-to-fertilizer map: -201390752 0 263005475 -772560454 263005475 186665885 -3597849741 3228095269 216867970 -959226339 951560560 85171934 -2882237029 3813801625 34286208 -0 586356609 16090261 -1460387186 1189054013 136970257 -2511361703 2581174071 147006778 -201110502 1477157137 280250 -3582774663 3444963239 15075078 -2073881675 2245158204 30510333 -3127914126 3163440286 64654983 -1724767985 602446870 349113690 -1597357443 1036732494 127410542 -1044398273 1164143036 24910977 -635875205 449671360 136685249 -2916523237 2728180849 211390889 -1069309250 1854080268 391077936 -167223128 1820192894 33887374 -4168481019 2454687794 126486277 -3496254979 4048626015 86519684 -2454687794 4238293387 56673909 -2104392008 1648916365 171276529 -3814717711 3460038317 353763308 -464396227 1477437387 171478978 -2658368481 2939571738 223868548 -16090261 1326024270 151132867 -3393107291 4135145699 103147688 -3192569109 3848087833 200538182 - -fertilizer-to-water map: -357701033 441924316 54941059 -2047098412 1574732688 106451110 -2414997091 2961420861 217583761 -3647103220 3202843177 147888878 -1781607871 3397471081 265490541 -433955285 629676938 29320532 -3280739425 2494455782 366363795 -2818710889 1426835569 147897119 -1120892574 3179004622 23838555 -1539573533 3662961622 195295312 -3794992098 1820059317 63264836 -0 84223283 357701033 -1144731129 1702496991 117562326 -2153549522 2046878176 261447569 -593734757 726830618 239035306 -987137385 83279657 943626 -2966608008 0 83279657 -1734868845 3350732055 46739026 -1438972249 2860819577 100601284 -2632580852 2308325745 186130037 -1262293455 965865924 108845646 -412642092 1681183798 21313193 -472462518 1305563330 121272239 -988081011 496865375 132811563 -463275817 2037691475 9186701 -3049887665 1074711570 230851760 -832770063 1883324153 154367322 -1371139101 658997470 67833148 - -water-to-light map: -4062286509 3839153068 91029970 -1610728246 3827168971 11474903 -2753947407 2725849236 1101319735 -2525484879 1829977386 228462528 -657837215 1095779595 241604827 -1895347620 1337384422 492592964 -1425623249 4009599599 185104997 -2446068318 3930183038 79416561 -1894838426 3838643874 509194 -2389619503 896001044 56448815 -3855267142 2058439914 207019367 -1187459420 657837215 238163829 -1622203149 2467395620 172372577 -2387940584 952449859 1678919 -985523081 2265459281 201936339 -4153316479 954128778 141650817 -1794575726 4194704596 100262700 -899442042 2688664470 37184766 -936626808 2639768197 48896273 - -light-to-temperature map: -0 2682471120 43545350 -2829609407 2423668531 227914183 -3685065657 3821208881 65673550 -1319277847 0 33132672 -818263707 3091863377 5216721 -3144636417 670795080 1340457 -1352410519 895535914 570572224 -2709351136 1662268878 120258271 -115643652 2726016470 93054822 -455333494 1538206440 124062438 -3839611769 4030334543 30664857 -3750739207 4258515305 36451991 -2070721515 33132672 155555065 -3132740473 2067641423 5192544 -4147162986 3685065657 58311172 -4278703737 3743376829 16263559 -1070098598 2174489282 249179249 -716608392 2072833967 101655315 -43545350 1466108138 72098302 -3057523590 3016646494 75216883 -2700979566 887164344 8371570 -4205474158 4060999400 73229579 -2226276580 188687737 474702986 -1971879519 1968799427 98841996 -3931845119 4134228979 124286326 -579395932 2819071292 137212460 -3137933017 672135537 6703400 -1062694241 663390723 7404357 -3787191198 3886882431 52420571 -269061216 1782527149 186272278 -1031805835 2651582714 30888406 -823480428 678838937 208325407 -3870276626 3759640388 61568493 -4056131445 3939303002 91031541 -1922982743 3097080098 48896776 -208698474 2956283752 60362742 - -temperature-to-humidity map: -219529182 731674447 232727899 -2748076784 2771987989 46463882 -2514344851 4061235363 233731933 -0 1369964423 219529182 -452257081 362359049 21789881 -4243457964 2720478657 51509332 -3085663754 3109574959 64704581 -1639319644 384148930 347525517 -3150368335 3626166922 251414834 -1986845161 0 139120377 -1382707786 1339581093 30383330 -1413091116 1113352565 226228528 -2794540666 2818451871 291123088 -2125965538 338187591 24171458 -474046962 139120377 157229612 -2361125570 1100881680 12470885 -631276574 296349989 41837602 -3401783169 3428035243 198131679 -3989702261 3174279540 253755703 -2224646236 964402346 136479334 -2150136996 2299087215 74509240 -3806048654 3877581756 183653607 -3599914848 2514344851 206133806 -673114176 1589493605 709593610 - -humidity-to-location map: -4029426902 1202474782 191291587 -2764446301 708692227 493782555 -2188304413 3350514524 33021460 -3318755823 4213528230 67155117 -2000392671 620732246 87959981 -3754724301 3075811923 274702601 -3258228856 1393766369 60526967 -2088352652 4113576469 99951761 -363515622 1849258760 614077493 -1213242541 342257124 11129119 -1733046668 353386243 267346003 -1224371660 4280683347 14283949 -2577070088 2888435710 187376213 -4220718489 2832149614 56286096 -324294413 1810037551 39221209 -3385910940 2463336253 368813361 -977593115 3383535984 235649426 -1238655609 3619185410 494391059 -4277004585 324294413 17962711 -2221325873 1454293336 355744215 \ No newline at end of file diff --git a/input/day07.txt b/input/day07.txt deleted file mode 100644 index d5ab2e5..0000000 --- a/input/day07.txt +++ /dev/null @@ -1,1000 +0,0 @@ -32T3J 893 -A9942 54 -J57Q8 571 -779TK 931 -69696 457 -Q55Q5 478 -99399 735 -TA756 782 -QQQKQ 838 -QTJJA 995 -J7T7T 8 -22792 790 -588K8 376 -J77KT 191 -72T29 575 -58585 196 -58535 394 -263K5 566 -ATAAA 352 -7K7AK 477 -A3829 14 -22349 954 -KT647 244 -84848 208 -82A8A 77 -3A383 698 -97788 820 -QQ4Q7 991 -67Q66 837 -73QQ7 879 -Q4Q5Q 69 -Q5Q33 767 -585TT 52 -5K859 943 -238A3 170 -48887 668 -QAQQQ 591 -A8755 666 -4AK62 157 -4A9J4 350 -TJAAA 280 -AT9T9 592 -7Q497 390 -56748 681 -9425A 414 -5357J 737 -5QQQQ 597 -383QT 583 -TQTJT 81 -T36AQ 441 -899A9 485 -AKA22 667 -73K73 676 -782AJ 361 -TKKTK 608 -8J8JJ 317 -2J222 579 -TJ224 259 -6AK5Q 484 -Q5T9K 618 -JAKJ7 687 -KT9J2 348 -7775J 653 -9297A 798 -A72AA 642 -49749 794 -22282 733 -22Q8Q 810 -QK456 308 -853K9 568 -99A88 573 -88A8Q 20 -8Q47T 855 -39548 184 -7J478 92 -75755 710 -986T5 407 -8837K 999 -64J7A 345 -444K4 364 -39475 775 -J332A 413 -77JTJ 921 -47272 154 -K2T3A 318 -222A2 211 -7J695 935 -344QQ 683 -36Q26 728 -7QJ56 543 -25QTJ 555 -8Q88Q 928 -T5KTT 559 -A8T96 365 -44446 319 -A6A3J 880 -43KK3 948 -9J244 882 -6A66A 804 -88868 117 -J86T7 140 -969J9 18 -J2387 742 -79Q9Q 766 -83888 194 -43556 16 -8AA88 233 -Q2895 65 -QQ879 90 -TTT99 729 -64633 548 -A8K7A 884 -68A9A 429 -85A33 635 -J2A22 876 -49AAA 906 -25222 625 -TA33K 454 -99499 759 -78T4K 753 -76QQJ 89 -34TTT 445 -6K4J5 100 -4TQ82 114 -T7T75 28 -TJJTT 490 -4KKK6 716 -KKK5J 119 -642TJ 781 -227AJ 189 -89388 590 -865J3 553 -29962 997 -43Q7Q 736 -AJ792 351 -4Q4J6 572 -A6JA6 652 -74477 799 -KA889 593 -JJ56K 556 -AA787 867 -JAAJJ 35 -J4625 640 -52829 295 -97772 192 -Q79Q7 474 -8A2AJ 748 -525TJ 278 -69639 360 -T222T 58 -777J7 832 -QQJQQ 245 -66A63 725 -T7222 594 -955TT 430 -3373Q 703 -33KJ3 173 -9Q8TQ 122 -9KKK7 27 -88828 632 -AQTAT 524 -955J3 420 -77472 76 -T535K 585 -6K677 107 -TAJAT 85 -J64T5 646 -83QJ8 609 -88KKK 195 -TT8J8 897 -QTQTA 243 -78267 202 -3AKJK 32 -T8664 246 -84KK8 821 -JQQQT 178 -85Q88 288 -A93K8 23 -J2J24 582 -62622 498 -97A34 953 -6JK2J 149 -53322 788 -79A83 898 -73429 491 -33QTQ 201 -A9999 160 -2T26K 866 -JTJ39 770 -Q422T 881 -35333 833 -J4262 795 -6QJ8Q 289 -J69J9 908 -3433K 565 -226Q2 606 -JAKKK 786 -6Q22Q 258 -4454Q 421 -QAQ33 287 -KK68K 648 -3T4K2 3 -78526 489 -K66KK 980 -J99J9 56 -AA3JA 705 -A486T 33 -K4999 144 -6QA29 950 -69999 892 -KAKAK 480 -A5A23 675 -T5T6T 458 -TT5A5 774 -T7857 465 -A79QQ 532 -6T66T 388 -5556T 717 -4949A 695 -27227 650 -QA8J5 545 -44949 341 -76JA2 104 -J568K 511 -TK7A2 239 -63AK2 432 -67876 419 -J2J99 519 -JAAJA 680 -8TA7T 281 -85249 162 -89Q99 367 -6K664 526 -66J96 273 -QJ995 422 -K2KK2 521 -KJKKJ 322 -22A8A 584 -96A47 925 -9QJ52 50 -29J52 515 -4Q6J6 124 -2522Q 993 -7J922 596 -TT9T2 875 -49484 677 -A5KKA 500 -J9Q9Q 701 -TK228 577 -42224 911 -66K96 126 -4T7K2 241 -3Q267 706 -8J22K 111 -TTT55 481 -6555K 901 -55557 152 -859JJ 933 -Q44AA 408 -27J88 974 -44J44 947 -A42K8 777 -QQQ6Q 49 -AJ529 418 -TATTT 93 -A5AAA 562 -TTTT6 504 -AAA78 496 -T549J 7 -Q332Q 276 -T4434 382 -JTJTA 123 -A7A9A 678 -44JJ4 406 -T934K 130 -444TQ 358 -J64J4 917 -9Q9QA 981 -J33J3 549 -TK68J 29 -Q7956 186 -A5TAT 400 -KTKT3 529 -J7887 707 -6KA6K 383 -Q4Q6A 976 -76565 870 -8T9J8 578 -KAJKA 333 -AK4J9 926 -KQQJQ 190 -88588 914 -45T4J 621 -7Q777 796 -Q8Q3Q 803 -J7755 449 -65K74 626 -8787Q 847 -QJJ9J 904 -Q8Q8Q 227 -Q9J5K 567 -K2K9K 369 -T7T7T 145 -K3366 731 -AK3T7 79 -TQ328 397 -JQJJQ 297 -77799 886 -35J6J 745 -K6T78 890 -88AA5 638 -J3Q38 301 -36T74 392 -666QA 814 -43JQ8 613 -J7J79 570 -KQK55 768 -TT5TT 61 -49TA5 109 -2QQ2Q 336 -9J9AQ 561 -J8866 512 -A2JAQ 309 -KKTTT 518 -6J692 826 -8Q2A2 403 -9J899 990 -9966A 887 -55J25 620 -4TT66 125 -62JK8 68 -44766 342 -2A475 513 -KJKK4 385 -324J8 569 -66636 785 -438KQ 143 -54855 749 -93929 337 -58886 853 -9AT99 266 -59535 547 -99599 451 -7367Q 335 -534A9 409 -AAJQQ 758 -68K54 909 -JK259 859 -A3535 938 -J6446 969 -97999 659 -446A6 851 -48T9T 848 -K5T7A 412 -8J696 517 -JT664 306 -TQ6Q2 416 -66667 60 -T89AQ 235 -54J34 824 -64969 141 -73JKJ 427 -AAT3K 249 -T7T77 891 -8JA88 861 -74T57 514 -69A9K 937 -JJK7K 651 -AAQQQ 827 -622TJ 142 -72882 822 -44595 71 -KKKJ8 257 -6656T 151 -64725 78 -J65AA 193 -68744 920 -63943 399 -9KQQ9 685 -4K2A9 240 -A236A 282 -77575 442 -648JJ 463 -55655 520 -99K99 973 -9J9AA 699 -72K22 460 -JK47A 817 -3Q3Q3 713 -J4628 44 -Q88AQ 986 -J6668 375 -T85T8 988 -4T44T 506 -K9989 311 -48888 368 -7753K 952 -88666 761 -J8AJA 136 -74494 175 -KK373 657 -4KT4T 712 -9339J 99 -K52T7 47 -JJ8QQ 42 -32222 210 -62626 212 -65552 213 -47A82 260 -T4J6A 41 -345J3 82 -4799J 924 -JT5K9 181 -8JJ88 791 -T4672 476 -A675K 204 -7A499 354 -848JK 377 -3863K 787 -4929Q 183 -KKK78 872 -65KK9 958 -94355 434 -37T7Q 523 -338T6 447 -52JA5 39 -JAAKA 326 -8KKQ8 715 -5T333 533 -44T2J 131 -233K3 831 -935T6 689 -A64K8 929 -T7699 630 -2QJ66 669 -A2KJJ 922 -AT992 588 -93QTQ 251 -66668 440 -7KJTT 393 -8T674 269 -8AA32 324 -97AJ9 692 -3J335 563 -2A3K7 229 -QK7KQ 772 -QQAA9 834 -73232 916 -296Q7 464 -65J65 272 -KKK55 721 -66333 223 -QQQTA 663 -9AKAA 604 -888J8 261 -64646 605 -636J6 452 -6J665 873 -94TTT 507 -KT9K9 616 -K2K53 426 -4T944 751 -43423 809 -889T8 509 -3AKQJ 655 -QQQ98 146 -9Q444 359 -993J4 59 -22K26 75 -T58K2 118 -5T55Q 808 -6A4Q4 492 -T4JT9 516 -TJ8A5 552 -3AQ59 4 -297K3 915 -7Q288 815 -44KJK 726 -8J496 531 -88A3A 979 -2AQ76 21 -K5K8K 248 -2373Q 603 -Q5666 660 -Q2424 472 -J2422 828 -TT7TT 304 -KJKQ7 960 -2AT68 24 -T66Q6 899 -A9852 225 -TT2TT 852 -75975 720 -73AT3 671 -J7773 155 -52225 15 -ATJKT 299 -6KKKJ 168 -667J4 732 -44J47 188 -77Q78 43 -Q63K8 741 -4T4A4 939 -Q7Q77 905 -KKK9K 294 -KAJ4K 330 -977TJ 842 -56JKQ 300 -67K5T 26 -J944K 468 -Q3Q3Q 187 -777AQ 975 -42Q7J 264 -J5KQ5 994 -9J42A 670 -8A4QA 525 -7TTT6 877 -K8KKK 497 -67T62 483 -6222A 197 -Q4584 381 -5595J 714 -3T6T6 987 -QQTQT 64 -KKTKK 495 -QKAA9 863 -KKKKQ 200 -3QAJ8 989 -222T5 797 -T9Q73 595 -TKK7T 945 -76767 871 -3837K 674 -99Q96 40 -JJ296 762 -KJ3KQ 98 -Q73A7 747 -5Q757 105 -447JT 373 -28298 356 -KK3KT 755 -266TT 992 -Q5JQ5 840 -KK59Q 538 -4A94Q 113 -T4TTT 268 -AAAJA 158 -T3T88 252 -JKKKK 690 -2339T 153 -QQ9Q9 718 -AA2AA 586 -666AK 602 -8Q55Q 743 -J4J4K 740 -9AK2J 600 -TTTT9 256 -94989 128 -K3KKK 387 -6K6TK 540 -3Q333 72 -QKQKQ 346 -Q7A8K 1 -2T222 679 -6AJJJ 378 -45A55 316 -TTT44 622 -A42K3 315 -49QTK 711 -4562Q 462 -58K27 818 -6Q8A8 539 -KJQQK 293 -Q28TK 946 -K8J49 220 -3333T 17 -T774K 48 -883J2 94 -5QQQ5 433 -T9325 971 -55855 998 -55K5K 96 -3T32K 167 -92229 226 -33KJ7 972 -Q7A3T 868 -6JQ6Q 177 -Q2Q55 756 -68K6A 581 -5555A 286 -85QQ6 185 -TTTTJ 934 -2JJ64 91 -46QQ6 254 -626J8 30 -43444 471 -TKQAK 550 -8KK5J 277 -A46K4 371 -48A8A 587 -88842 541 -JK9J9 405 -T225T 944 -TTTAJ 349 -J7629 320 -2K44K 843 -59857 754 -KKJ54 849 -T85QJ 36 -8T888 574 -99333 968 -44258 907 -9A37J 355 -QAAA2 53 -TT3TT 805 -6T696 878 -74A23 482 -6KJTT 784 -42QAT 488 -J874J 792 -2Q8JK 654 -89K87 967 -QQQQT 615 -A4A49 475 -QQJJK 885 -JAAA8 508 -AKA4K 384 -82T88 12 -99A55 658 -33338 614 -A93JA 214 -K386T 978 -4443J 428 -3KTT3 910 -22T62 888 -82637 487 -3T344 850 -J4424 874 -J734Q 302 -KJ4Q8 395 -JA9J5 636 -2AT5J 263 -9AK4Q 9 -KTTTT 174 -336J6 896 -JJJ8J 836 -Q7K25 530 -52AQT 672 -A6886 179 -6JJ66 148 -QJJQQ 165 -85685 291 -7QQJ7 31 -7KK87 171 -45534 112 -K55K2 106 -6A666 764 -38AA3 956 -KKAJT 940 -55578 846 -333J3 984 -3Q3J5 313 -8946K 13 -93J43 236 -8T9A3 869 -4K48K 823 -J222J 325 -TTJ99 279 -664Q6 628 -6QQQ6 87 -QJQQ8 2 -2TT2T 132 -65Q5K 607 -3K3KK 637 -777JJ 224 -9T84J 912 -99JA9 461 -5K332 923 -A57Q4 839 -46J59 844 -3768T 793 -JQ966 389 -KKK7A 723 -J4QKJ 645 -TQJ7A 110 -QJ2Q6 647 -22894 665 -22363 502 -KAKKK 682 -5KKKA 265 -K35K5 734 -Q6666 470 -T24TT 996 -8JQQT 163 -A6934 232 -98AA4 343 -KJJ77 332 -5TQ5J 697 -38Q89 627 -QQJ56 247 -T28T2 486 -55JQ5 551 -836Q9 629 -A88Q7 6 -52555 62 -84548 230 -9KKK9 37 -AA2AJ 789 -Q2222 854 -77K7K 900 -T8QT6 505 -95393 292 -783JQ 902 -8888A 97 -99779 86 -KKJJJ 961 -87558 951 -58T32 238 -QJ29J 528 -A7KJ3 323 -5T38K 860 -AKKK8 121 -J5589 366 -J99JJ 580 -J7QJK 829 -K7847 180 -44TQQ 825 -76266 760 -23Q6T 895 -73Q87 234 -A6282 328 -QQ9Q2 417 -J5224 599 -T66TT 215 -35555 862 -77787 536 -7TQ2J 228 -T5JTQ 431 -K24Q9 816 -53KKK 410 -Q666Q 402 -6K67K 334 -T8TTT 962 -66664 147 -AKAKA 446 -J844A 773 -2JQQ2 510 -92Q99 73 -44Q4Q 129 -42K9K 479 -66Q34 290 -33322 783 -A6AAA 401 -2JQJ4 927 -J5558 218 -3Q343 303 -995J5 779 -TJJTJ 70 -557K5 466 -86656 134 -3AQQK 275 -65J3A 339 -A584T 558 -A9A99 644 -J5J74 641 -3A9JK 127 -67KQJ 469 -Q3QKK 631 -88A7J 830 -JJK67 115 -47AKQ 231 -77677 456 -2T3T6 25 -K24TQ 19 -AQ3AA 46 -92289 57 -66565 95 -345JQ 894 -T7JA8 250 -QQJ88 274 -2QJ2A 253 -77737 913 -KK22J 271 -J66JJ 270 -K9QJ9 380 -75KK7 172 -QQAJQ 769 -33J88 22 -AJ88A 780 -T98Q8 473 -88KK8 363 -36T97 216 -777KA 771 -QT77K 883 -K5KT5 738 -73QJ9 396 -7A59J 296 -J7876 493 -J977A 467 -999J9 903 -6KA95 802 -QA3KK 298 -88558 448 -JA8KT 88 -3A73J 307 -288QA 966 -9Q563 845 -JTAA8 576 -8AJ37 746 -5AQ28 435 -8473Q 964 -JAA5T 423 -QTQTT 918 -44547 284 -66QJ5 776 -65556 340 -3AA33 221 -7975J 398 -54Q94 858 -5666K 83 -2A3J6 169 -5J554 763 -AQ9A4 865 -5468J 812 -QQ7QQ 598 -Q9999 807 -Q2QQQ 459 -46AAA 34 -A788A 702 -JTTK8 453 -5AJ7T 164 -A38K6 159 -QJ5QQ 750 -J54KT 116 -JTKKK 688 -499KK 63 -A5538 404 -6TAA3 242 -Q9J43 379 -6A2JQ 535 -Q8882 643 -535J3 686 -666J6 813 -93963 857 -5TA42 353 -99J53 205 -JQ7K3 222 -92A66 1000 -K5QT5 634 -5AA6A 806 -KKTAK 206 -5242T 708 -26K26 344 -JK8T8 841 -39A92 357 -726J7 719 -33QT7 5 -Q3J6T 554 -9K69T 66 -JJJJJ 503 -866AA 601 -K96A4 267 -T222J 45 -AJQAA 744 -7K7J7 370 -JJJ34 499 -77TTK 161 -98T35 347 -3J8J3 949 -92J2T 941 -2JJJ2 957 -87QQ2 557 -67646 649 -T5T99 166 -6Q26Q 765 -4J538 437 -TAQ67 103 -8TT8T 662 -7A77A 120 -5555J 176 -449J9 709 -JK98Q 811 -K8JKJ 930 -25AA2 752 -222QQ 321 -22K22 386 -76J55 362 -93577 656 -555JJ 589 -42Q54 684 -Q4QQQ 305 -3993A 391 -3JQ2K 544 -844J4 285 -AA222 314 -38467 970 -4Q6T8 331 -J4Q76 101 -33J64 450 -7A326 137 -9977K 10 -9JJK2 564 -2JKA8 739 -9QA72 694 -3K6KJ 527 -J6Q7J 444 -67AJQ 135 -99898 411 -79823 936 -5K643 237 -J62J6 696 -26T26 522 -K8AK3 415 -35553 864 -J23T2 374 -5555K 800 -JT266 977 -77772 639 -8822K 610 -KJQ9Q 835 -A9A9A 338 -J36T6 424 -2586Q 494 -73337 74 -A8AAA 438 -K66J6 199 -87J58 310 -5T4KT 133 -28768 329 -AA3A3 11 -77J27 80 -44442 691 -525KA 198 -86T5A 436 -5K55J 84 -33343 624 -3A733 965 -83523 67 -66896 982 -63JQ4 963 -QQT88 38 -27J42 150 -828T5 439 -3444A 955 -QTQQ8 55 -K839J 217 -64697 156 -43393 546 -K7777 51 -2QKJ2 704 -2A2AA 312 -AA5T3 534 -55544 139 -6572K 255 -6KJK6 425 -T987K 778 -3TA5Q 611 -QTT55 219 -86TTK 664 -TT344 207 -77577 327 -KJK3K 262 -J68J5 730 -43555 727 -TTK2A 537 -K58QA 919 -KAQ97 102 -A444J 443 -4J969 889 -9TTT3 283 -AT399 983 -KKJ98 661 -K22J2 501 -467J7 673 -QJTQJ 985 -787TK 932 -556A5 617 -6JT4T 372 -97343 724 -Q693Q 942 -999TJ 182 -TT9JQ 856 -88Q42 757 -633J3 560 -Q6295 722 -KK6J8 959 -QTTA8 693 -A8688 542 -82434 819 -6T6A9 623 -78J88 138 -83Q34 209 -J8847 619 -6QJ22 633 -59995 203 -99K7K 801 -A3343 455 -84982 108 -T42JT 700 -38383 612 \ No newline at end of file diff --git a/input/day08.txt b/input/day08.txt deleted file mode 100644 index 52d77ee..0000000 --- a/input/day08.txt +++ /dev/null @@ -1,680 +0,0 @@ -LRRLRRLRLLLRLLRLRRLRRLRRLRRLLRLLRRRLRRRLRRLLLRLRRLLLLLRRRLRRRLRRRLRRLRRLRLRLRLRLRRRLRRRLRRRLRRLRRLRLRLRRLLRRRLLRRLRRLRRRLRLLRRLRRLRRRLRRRLRRRLRRRLRRLLLRRRLLRRLLLRRLRRLLRRLRRRLRRLRRLRRRLRRLLLRLRRRLLRRRLRLRRLRLRLRLRRRLRLRLRRLLRRLRRLRRLRRLLRLRLRRRLRRLRRLRRLRLRRRLRRLRLLRRLLRRLRLLLRLLRRRLRLRLLRRRR - -FLG = (PCR, CTD) -NNF = (CNH, SPV) -LDS = (FSN, SPM) -NMM = (CXD, LRK) -MHT = (TXF, KCB) -RRS = (BGH, HVX) -HLD = (LPJ, NGG) -GFB = (DSN, JFX) -PSS = (HDG, SMV) -XJC = (XMH, HGK) -FJP = (KJR, QHG) -VRS = (XKT, CPC) -KKM = (VGJ, KJF) -HNR = (KDB, PSK) -RXS = (NDK, RNH) -JKB = (RFF, TSX) -KRN = (BGQ, KGK) -BCV = (XKT, CPC) -JFV = (VCT, DJS) -FXP = (TLV, JDV) -QJX = (GHH, GSK) -CDR = (SGR, TQC) -CTD = (XBH, JJP) -PVN = (JVM, CSF) -NKR = (FHQ, SNF) -NDA = (MBM, SQN) -KCB = (JDG, CPB) -SJK = (JMT, JMT) -HVL = (RFQ, CTF) -RSK = (FXP, BJV) -TRN = (LVV, MSF) -NBN = (MPX, PTT) -QTJ = (BQD, DBR) -PJC = (MFL, TSD) -RFJ = (QJM, CVN) -FCV = (NQB, MJQ) -NML = (RTB, RTF) -KGV = (NGB, LDR) -KRC = (NHR, QCL) -GSK = (MCF, BRM) -NQB = (SJX, XBP) -TFG = (PDN, VGM) -XPB = (GMV, GDB) -RTJ = (SPK, HVR) -RFD = (VND, HVM) -KGK = (MHP, GMB) -MBX = (MPX, PTT) -NMC = (XVB, CCC) -SLC = (GNH, JHV) -QDG = (QSL, PJC) -MLB = (CXV, XBD) -PRH = (TFC, DNT) -TVN = (VXM, SLJ) -QXQ = (FLG, LJS) -TBB = (FVQ, FNC) -TLV = (PCS, SXL) -RSP = (CLL, TGG) -LPJ = (JNB, JBN) -MFL = (CNS, QTJ) -PHN = (HGN, PQS) -XBP = (MPS, TVN) -RSJ = (KVS, QDJ) -TVG = (GGG, QDD) -HGT = (BCV, VRS) -SMD = (VTP, MSR) -BLS = (NHR, QCL) -QVX = (DMJ, BND) -RBL = (MFT, JCG) -JCQ = (LGG, NFH) -DKN = (XSM, BQJ) -JFX = (XTJ, LNN) -QNB = (XNB, BJL) -TGG = (XVK, VQC) -PKV = (JXJ, QLQ) -KDB = (BQN, VGH) -HSX = (BCF, KPC) -XVB = (QKR, JCL) -KHB = (VFG, QVH) -HSG = (GDB, GMV) -NHT = (QLM, LHJ) -NFK = (KJD, FTH) -RFR = (XBD, CXV) -MFT = (RKT, SDL) -HVM = (MLB, RFR) -PJV = (XNX, LTD) -QBV = (XNB, BJL) -DBD = (RRG, RGJ) -MXD = (VRC, KNL) -JMT = (VFG, VFG) -SVS = (KXR, BGS) -RLT = (HVL, VDS) -JCL = (DHF, XTT) -RFK = (MCH, JBX) -QCJ = (VFM, SQL) -LVV = (SMQ, QDG) -VJG = (PXB, MCX) -CNP = (HBG, RGD) -JRT = (SGF, RGV) -CXB = (TRN, XGP) -PQR = (HVQ, VCJ) -TJC = (NNF, MNK) -PSP = (JCG, MFT) -RTF = (HDL, GGD) -NKK = (GPR, TMT) -KGB = (VLR, XQK) -DXF = (BXF, PBQ) -DLJ = (JXJ, QLQ) -CTF = (BDM, JNH) -GBL = (LBT, LBT) -KVN = (KDX, QMG) -VTB = (PNH, TDC) -XVK = (NHT, GTT) -HVR = (TBP, GSG) -VSF = (XJQ, LJC) -SPV = (KGT, XPR) -FTX = (KJD, FTH) -NPK = (XXQ, XVS) -KVS = (RKG, MKR) -SLG = (VXJ, BBV) -MCF = (XTV, LTK) -PBQ = (RLL, DHX) -JKS = (SSS, DRM) -JVR = (FJQ, PPK) -MKR = (LLQ, BMD) -DVX = (CHH, LBC) -LDV = (HFR, FVC) -DLP = (LXL, QJX) -TMG = (XMM, PLL) -KGM = (SXK, VTB) -JCK = (DBJ, HGT) -CMD = (JTH, MRV) -QCL = (PVN, NBF) -CNJ = (CFC, PKL) -TPM = (RSN, LXQ) -DMX = (RVK, FVK) -KNL = (SMD, HPJ) -JVM = (QSF, MMJ) -GGT = (GPR, TMT) -TFV = (QMH, DKN) -NQC = (HNR, FQD) -GNF = (TXF, KCB) -NMB = (QFL, FJP) -VTH = (XRX, DMH) -RQG = (VBK, KHL) -JBX = (TCR, JDN) -SSS = (DKX, LQS) -MPX = (GQC, VTH) -TVD = (XHT, HSS) -HVQ = (JPN, FLF) -PXL = (HMN, DLP) -QDJ = (MKR, RKG) -CLG = (TVG, CMZ) -XVP = (PVQ, PVQ) -MGM = (NVH, GFB) -CHL = (XVB, CCC) -NHR = (PVN, NBF) -FQX = (HLD, DXH) -HVX = (MFF, TFJ) -CNH = (XPR, KGT) -SFG = (MBX, NBN) -VXJ = (VSF, KBN) -RTL = (CFC, PKL) -BQN = (KLL, LDV) -KJR = (CQF, HLT) -DNT = (GBL, PGJ) -RKG = (BMD, LLQ) -HPX = (VGT, JFV) -DBM = (QBV, QNB) -MJQ = (XBP, SJX) -SQL = (BFD, FSK) -MJD = (XFD, JPP) -QXJ = (TVG, TVG) -DFN = (HVM, VND) -DPT = (NMF, PTS) -XNX = (RBS, TFV) -KPC = (PLM, PST) -NPB = (MRV, JTH) -TFJ = (SJJ, CXB) -QLM = (KGM, NCN) -FBG = (NCR, KGV) -QNP = (DHR, XPJ) -MNN = (HVQ, VCJ) -JDJ = (NPB, CMD) -VXP = (SNF, FHQ) -SXT = (HQK, BMS) -THQ = (SHM, XTR) -NGD = (BPR, PFK) -RBS = (QMH, DKN) -LHQ = (BCF, KPC) -BFD = (MJM, RVQ) -RFF = (LDX, CLK) -BCF = (PLM, PST) -BQD = (HSX, LHQ) -SBT = (JCQ, TTL) -JSN = (XQK, VLR) -VDS = (CTF, RFQ) -DHR = (LSB, KDH) -LGM = (JQX, JQX) -LTV = (CHL, NMC) -TMJ = (VGJ, KJF) -BVP = (DXF, CBJ) -GMB = (HMK, CMC) -DVK = (CXD, LRK) -RXP = (XTG, BQS) -HJH = (HNR, FQD) -PDL = (FCV, CRB) -SBL = (NQC, HJH) -DJS = (LTQ, FLP) -MSD = (TQC, SGR) -QHG = (CQF, HLT) -TQC = (SCQ, BVH) -NHK = (GPM, XVF) -TBP = (LJR, MJK) -KHT = (JFV, VGT) -PJH = (SFG, KBH) -DGN = (CNV, VHC) -KXT = (RXS, PDM) -GNH = (VCL, PXL) -MRV = (PGD, GBP) -SHS = (JMT, KHB) -JRH = (HPX, KHT) -NCR = (LDR, NGB) -BJN = (RQG, CSL) -RJJ = (RGV, SGF) -KFD = (FCV, CRB) -CRD = (CSL, RQG) -CSF = (QSF, MMJ) -CXD = (NKK, GGT) -GXG = (XMH, HGK) -RDD = (BMS, HQK) -JDV = (SXL, PCS) -XQQ = (FPS, KMS) -QJM = (JKQ, FQX) -JCG = (SDL, RKT) -FJD = (VXP, NKR) -LXF = (JVR, QMX) -CRB = (NQB, MJQ) -BLZ = (PRP, XRL) -QMH = (BQJ, XSM) -FBN = (SPM, FSN) -JFK = (QDJ, KVS) -SRM = (TJC, TGV) -TQT = (MHT, GNF) -XPJ = (LSB, KDH) -VRD = (MNN, PQR) -MMD = (RDT, XQJ) -BPX = (RPH, SVS) -DRF = (CNP, DKR) -MTX = (RTF, RTB) -GPT = (QRC, TPM) -QFL = (QHG, KJR) -AAA = (FKJ, QVX) -PGD = (DVX, QCR) -XSM = (FJB, PJH) -PDM = (NDK, RNH) -GJV = (QRC, TPM) -LBC = (QTQ, QSN) -XXQ = (KHC, LHG) -QLQ = (PMM, QNP) -CMC = (KKM, TMJ) -PMM = (DHR, XPJ) -MHP = (HMK, CMC) -FVK = (NHK, TDM) -LFM = (QMG, KDX) -VGT = (VCT, DJS) -VBR = (RBL, PSP) -KRV = (KVG, RDN) -GBP = (DVX, QCR) -DHF = (QXJ, QXJ) -PTA = (XRL, PRP) -GPR = (CTR, PSS) -LRK = (GGT, NKK) -DKX = (QCJ, LND) -JGB = (GNH, JHV) -SKF = (JBX, MCH) -JQX = (MBM, SQN) -JNB = (GXS, SBT) -TFC = (GBL, GBL) -DBG = (FLG, LJS) -SJC = (TGV, TJC) -SDL = (RSP, KHM) -KMR = (LGM, LGM) -LTK = (DBG, QXQ) -QSM = (KVN, LFM) -NFH = (RCT, BQT) -PCS = (DRF, TST) -JCN = (JRH, MNQ) -TTL = (NFH, LGG) -PQH = (XTR, SHM) -JBN = (SBT, GXS) -KBH = (MBX, NBN) -VXM = (SBL, KXX) -SCQ = (LDG, TFG) -RTB = (GGD, HDL) -MRF = (PDH, PXQ) -KLL = (FVC, HFR) -QMX = (PPK, FJQ) -VXQ = (RGJ, RRG) -BBV = (KBN, VSF) -NBF = (JVM, CSF) -XTG = (SLG, CMV) -XMF = (QJM, CVN) -DFB = (PBM, DMX) -PNH = (TBB, JSS) -XPR = (FBG, XXX) -JPP = (HHD, PVP) -XBH = (PKB, LTX) -XNB = (BGD, LPL) -RVB = (BMC, PRH) -HSS = (KMR, RLK) -GNG = (VQH, NMB) -LQS = (QCJ, LND) -BMD = (JRT, RJJ) -VFM = (BFD, FSK) -LXZ = (LQP, JBG) -MBH = (RPH, SVS) -QRC = (LXQ, RSN) -LLQ = (JRT, RJJ) -KBN = (LJC, XJQ) -SCR = (QLV, NRT) -SXL = (DRF, TST) -VGM = (GHN, FJD) -FLP = (NLN, PHN) -PFK = (RFJ, XMF) -BMS = (MMX, JDJ) -PNC = (KJV, NPK) -TTM = (JQX, RLZ) -LGG = (BQT, RCT) -VPM = (GNG, RTH) -BJL = (BGD, LPL) -CXV = (VKG, KHK) -RFQ = (BDM, JNH) -DQX = (JLX, RXP) -BGH = (TFJ, MFF) -HHD = (LHC, FHR) -SHM = (GVF, KXT) -HGK = (KRV, PNG) -BMC = (TFC, TFC) -MSR = (SRN, TQT) -KHL = (RFK, SKF) -XFD = (PVP, HHD) -FCK = (PVQ, GGC) -QCR = (CHH, LBC) -LTX = (MGM, VFD) -BGQ = (GMB, MHP) -XFJ = (NRT, QLV) -TGV = (NNF, MNK) -KXX = (HJH, NQC) -DKR = (RGD, HBG) -LND = (SQL, VFM) -DBR = (HSX, LHQ) -DJB = (MRF, PHJ) -VKG = (RTJ, HKL) -JPN = (KMT, TVD) -LNF = (FGQ, NTG) -NDK = (DFB, LLF) -MMJ = (RQH, QSG) -NMF = (LJT, BPS) -JMF = (SRM, SJC) -RGV = (MBH, BPX) -MBM = (XNR, VJK) -JGT = (CQT, LXF) -XTT = (QXJ, CLG) -SLJ = (SBL, KXX) -JNC = (NMF, PTS) -VJK = (HVG, LDT) -XQK = (BTX, QLN) -SNR = (DTS, LNF) -MQR = (FGG, CCV) -VCJ = (JPN, FLF) -QTN = (VRC, KNL) -RLZ = (SQN, MBM) -FNC = (SRX, JQD) -GCD = (DLJ, PKV) -SQT = (PKV, DLJ) -LHC = (MMD, CNR) -HGN = (QJH, BMR) -QSL = (TSD, MFL) -BGS = (DVK, NMM) -CCC = (QKR, JCL) -TSX = (CLK, LDX) -PRP = (MJD, XMS) -RCT = (KRC, BLS) -QMM = (XNN, QSM) -MCX = (SGP, PJV) -SQN = (XNR, VJK) -BVH = (TFG, LDG) -VFD = (GFB, NVH) -SCV = (SJC, SRM) -TDM = (XVF, GPM) -DTS = (FGQ, NTG) -RDT = (RNF, RLT) -HKL = (SPK, HVR) -TCK = (TSX, RFF) -HDL = (BNL, RRS) -CVN = (FQX, JKQ) -PBA = (DFN, RFD) -PGJ = (LBT, BLZ) -DPM = (MNN, PQR) -KHC = (QMM, KVL) -BRM = (LTK, XTV) -VTP = (TQT, SRN) -DBJ = (VRS, BCV) -JTP = (VHC, CNV) -HMK = (TMJ, KKM) -JQD = (GCD, SQT) -QDD = (TNT, VJG) -FQD = (KDB, PSK) -QLV = (VBR, BXG) -LXL = (GHH, GSK) -MMX = (NPB, CMD) -VFG = (MKX, MKX) -PDH = (NHJ, LTV) -RGJ = (DQX, VLD) -NHJ = (CHL, NMC) -NLN = (HGN, PQS) -LTQ = (NLN, PHN) -RRG = (DQX, VLD) -VHC = (SXT, RDD) -VGJ = (QMC, TMG) -HFR = (JCN, RNJ) -GGC = (JHJ, MNP) -QLN = (NNM, PNC) -XTV = (QXQ, DBG) -QCN = (SSS, DRM) -LJS = (PCR, CTD) -GMV = (HQM, KRN) -JDN = (RSK, SLM) -SMQ = (PJC, QSL) -LJC = (SMH, VPM) -CHH = (QTQ, QSN) -CMZ = (QDD, GGG) -CDC = (BPR, PFK) -NCN = (SXK, VTB) -GHH = (BRM, MCF) -MNQ = (HPX, KHT) -JLX = (BQS, XTG) -VND = (RFR, MLB) -QMC = (XMM, PLL) -BPS = (JFK, RSJ) -SNF = (XPB, HSG) -BPR = (XMF, RFJ) -JHJ = (DHH, DHH) -XKT = (NFK, FTX) -BDM = (PDL, KFD) -GHN = (NKR, VXP) -RTH = (VQH, NMB) -SGR = (SCQ, BVH) -MNK = (CNH, SPV) -QKR = (DHF, DHF) -HLT = (XVP, FCK) -JJP = (LTX, PKB) -NGB = (JSN, KGB) -BXB = (LNF, DTS) -RVQ = (QQM, XQQ) -PLL = (DBD, VXQ) -XDL = (CBJ, DXF) -KJF = (QMC, TMG) -VQH = (QFL, FJP) -RKT = (RSP, KHM) -VFL = (PHJ, MRF) -MNP = (DHH, ZZZ) -LHJ = (NCN, KGM) -DMH = (KNV, MKP) -RLL = (SCR, XFJ) -BNL = (BGH, HVX) -XLB = (JCK, MXG) -PCR = (JJP, XBH) -KDH = (DJB, VFL) -XTR = (GVF, KXT) -PSK = (VGH, BQN) -DVA = (JBG, LQP) -MFF = (CXB, SJJ) -GQC = (XRX, DMH) -CFC = (TCK, JKB) -RNJ = (MNQ, JRH) -BND = (KCQ, JGT) -GXS = (TTL, JCQ) -LDR = (JSN, KGB) -CQF = (XVP, FCK) -BJV = (TLV, JDV) -KXR = (DVK, NMM) -PBM = (FVK, RVK) -MJM = (XQQ, QQM) -LLF = (PBM, DMX) -MKP = (NGV, KHN) -XMM = (DBD, VXQ) -MNT = (DFN, RFD) -FGG = (JTP, DGN) -XRX = (MKP, KNV) -CLK = (GXG, XJC) -CPM = (NGD, CDC) -SGF = (MBH, BPX) -MXG = (HGT, DBJ) -SDS = (QNB, QBV) -NNM = (NPK, KJV) -BXG = (PSP, RBL) -SXK = (PNH, TDC) -PQS = (QJH, BMR) -FSK = (MJM, RVQ) -CPC = (FTX, NFK) -KVL = (XNN, QSM) -JDG = (GPT, GJV) -XRL = (MJD, XMS) -HPJ = (VTP, MSR) -CBJ = (BXF, PBQ) -PDN = (GHN, FJD) -SGP = (XNX, LTD) -QVH = (MKX, LXZ) -RNF = (HVL, VDS) -CLL = (XVK, VQC) -QSF = (RQH, QSG) -PKB = (VFD, MGM) -KHN = (BVP, XDL) -KJD = (RTL, CNJ) -VRC = (HPJ, SMD) -FTH = (RTL, CNJ) -BQS = (SLG, CMV) -LCP = (MNT, MNT) -GVF = (RXS, PDM) -LNN = (MBC, XDQ) -LJR = (MXD, QTN) -XJQ = (VPM, SMH) -DHH = (FKJ, QVX) -FVC = (JCN, RNJ) -GPM = (SNR, BXB) -QSG = (JNC, DPT) -CNV = (RDD, SXT) -FLF = (KMT, TVD) -PNG = (KVG, RDN) -FVQ = (JQD, SRX) -TXF = (JDG, CPB) -XTJ = (XDQ, MBC) -HVG = (FRN, MQR) -PXB = (PJV, SGP) -PTS = (BPS, LJT) -TMT = (CTR, PSS) -GDB = (KRN, HQM) -HMN = (LXL, QJX) -VQC = (NHT, GTT) -HDG = (LCP, LCP) -KHK = (HKL, RTJ) -FRN = (FGG, CCV) -FKJ = (DMJ, BND) -PVJ = (NGD, CDC) -PVQ = (JHJ, JHJ) -SLM = (BJV, FXP) -MSF = (QDG, SMQ) -SPK = (TBP, GSG) -PPK = (MSD, CDR) -CCV = (DGN, JTP) -TDC = (TBB, JSS) -PLM = (RVB, PXV) -MKX = (JBG, LQP) -PMZ = (RFD, DFN) -RPH = (KXR, BGS) -JSS = (FVQ, FNC) -XVF = (SNR, BXB) -SMV = (LCP, VPH) -KMS = (LDS, FBN) -KJV = (XVS, XXQ) -SRX = (GCD, SQT) -GTT = (QLM, LHJ) -DMJ = (KCQ, JGT) -LQP = (PQH, THQ) -BMR = (SLC, JGB) -VPH = (MNT, PMZ) -SMH = (GNG, RTH) -XXX = (KGV, NCR) -PKL = (TCK, JKB) -XVS = (LHG, KHC) -HCA = (GGG, QDD) -LHG = (QMM, KVL) -KMT = (XHT, HSS) -CNS = (BQD, DBR) -CQT = (QMX, JVR) -FSN = (SDS, DBM) -QMG = (XLB, TKJ) -QQM = (KMS, FPS) -RQH = (JNC, DPT) -NGV = (XDL, BVP) -XMH = (KRV, PNG) -JXJ = (QNP, PMM) -RGD = (JKS, QCN) -LDG = (VGM, PDN) -DHX = (XFJ, SCR) -XBD = (VKG, KHK) -MBC = (MTX, NML) -SKK = (SJK, SHS) -XDQ = (MTX, NML) -VGH = (KLL, LDV) -VLD = (RXP, JLX) -KVG = (DPM, VRD) -LTD = (RBS, TFV) -FHR = (MMD, CNR) -PXV = (BMC, PRH) -KHM = (TGG, CLL) -GGG = (TNT, VJG) -TNT = (PXB, MCX) -FPS = (FBN, LDS) -PVP = (FHR, LHC) -CMV = (VXJ, BBV) -RSN = (CPM, PVJ) -NTG = (BJN, CRD) -BQJ = (FJB, PJH) -SJX = (MPS, TVN) -LPL = (SKK, HTT) -CPB = (GJV, GPT) -DRM = (DKX, LQS) -XQJ = (RLT, RNF) -CSL = (VBK, KHL) -TCR = (RSK, SLM) -DSN = (XTJ, LNN) -VCT = (FLP, LTQ) -JHV = (VCL, PXL) -PXQ = (NHJ, LTV) -LSB = (VFL, DJB) -VBK = (SKF, RFK) -NVH = (JFX, DSN) -GGD = (RRS, BNL) -LDX = (XJC, GXG) -FJB = (SFG, KBH) -LDT = (MQR, FRN) -QSN = (SCV, JMF) -BGD = (SKK, HTT) -GSG = (MJK, LJR) -CNR = (XQJ, RDT) -NRT = (VBR, BXG) -NGG = (JBN, JNB) -ZZZ = (QVX, FKJ) -FGQ = (BJN, CRD) -KNV = (KHN, NGV) -XNR = (HVG, LDT) -PHJ = (PDH, PXQ) -LBT = (XRL, PRP) -HQK = (MMX, JDJ) -BXF = (RLL, DHX) -TKJ = (MXG, JCK) -SJJ = (TRN, XGP) -HBG = (JKS, QCN) -KCQ = (LXF, CQT) -XMS = (XFD, JPP) -LXQ = (CPM, PVJ) -JTH = (GBP, PGD) -RLK = (LGM, TTM) -TST = (DKR, CNP) -BQT = (KRC, BLS) -VCL = (HMN, DLP) -RDN = (VRD, DPM) -XGP = (MSF, LVV) -KGT = (XXX, FBG) -HTT = (SJK, SHS) -PST = (RVB, PXV) -JKQ = (DXH, HLD) -JNH = (PDL, KFD) -RNH = (LLF, DFB) -KDX = (XLB, TKJ) -PTT = (GQC, VTH) -FHQ = (XPB, HSG) -XNN = (LFM, KVN) -MCH = (JDN, TCR) -MPS = (VXM, SLJ) -BTX = (NNM, PNC) -CTR = (HDG, HDG) -QJH = (JGB, SLC) -SPM = (SDS, DBM) -FJQ = (CDR, MSD) -DXH = (NGG, LPJ) -VLR = (BTX, QLN) -SRN = (GNF, MHT) -MJK = (QTN, MXD) -QTQ = (SCV, JMF) -HQM = (KGK, BGQ) -RVK = (TDM, NHK) -JBG = (THQ, PQH) -TSD = (CNS, QTJ) -LJT = (RSJ, JFK) -XHT = (KMR, KMR) \ No newline at end of file diff --git a/input/day09.txt b/input/day09.txt deleted file mode 100644 index 51aec5a..0000000 --- a/input/day09.txt +++ /dev/null @@ -1,200 +0,0 @@ --3 8 35 82 152 255 432 803 1648 3531 7478 15221 29521 54584 96585 164316 269975 430114 666765 1008764 1493294 -12 27 56 116 234 455 852 1535 2668 4532 7730 13740 26223 53845 115961 253452 548456 1158885 2376712 4723336 9101236 -3 13 35 69 115 173 243 325 419 525 643 773 915 1069 1235 1413 1603 1805 2019 2245 2483 -6 30 78 166 318 581 1054 1938 3622 6826 12819 23717 42864 75377 129249 218254 369843 645270 1187135 2324466 4792495 -8 20 48 96 170 278 430 638 916 1280 1748 2340 3078 3986 5090 6418 8000 9868 12056 14600 17538 -10 28 46 54 38 -14 -105 -228 -366 -458 -249 1115 5938 19484 52314 123455 264058 520584 955564 1642484 2649198 -13 20 32 61 128 259 472 746 961 800 -382 -3677 -10602 -22661 -39996 -58340 -63147 -19452 144180 559145 1448580 --2 11 33 62 111 222 479 1020 2048 3841 6761 11262 17897 27324 40311 57740 80610 110039 147265 193646 250659 -1 4 10 31 92 244 593 1357 2983 6386 13408 27644 55869 110482 213789 405871 759865 1413024 2631366 4944409 9421686 -3 7 12 15 13 19 90 375 1197 3191 7547 16486 34292 69668 141160 289463 604654 1284710 2757373 5926008 12650378 -17 30 60 120 223 382 610 920 1325 1838 2472 3240 4155 5230 6478 7912 9545 11390 13460 15768 18327 -21 33 59 118 238 466 892 1702 3296 6536 13233 27057 55185 111223 220292 427707 813463 1515843 2768959 4961016 8722648 --9 -10 -11 -21 -46 -77 -68 116 817 2826 7846 19354 44214 95751 199690 405660 809383 1595322 3118827 6065589 11764030 -29 43 61 87 125 179 253 351 477 635 829 1063 1341 1667 2045 2479 2973 3531 4157 4855 5629 -22 37 63 123 266 580 1213 2410 4574 8359 14803 25509 42882 70430 113137 177916 274150 414329 614791 896575 1286394 -12 33 72 146 285 545 1033 1958 3733 7174 13896 27139 53562 107194 218027 450155 938626 1961319 4073624 8351424 16814387 -3 14 42 102 213 412 780 1472 2751 5056 9198 16886 31949 62863 127558 262041 535227 1073638 2101418 4003474 7422421 -24 52 106 197 336 534 802 1151 1592 2136 2794 3577 4496 5562 6786 8179 9752 11516 13482 15661 18064 -11 25 41 74 161 371 830 1783 3738 7777 16182 33616 69219 140113 276942 532255 993104 1801280 3191010 5571077 9719076 -10 20 40 93 214 455 896 1669 3010 5378 9731 18136 35020 69547 139835 280008 551410 1059688 1979874 3592055 6330706 -8 3 -1 1 20 81 251 706 1868 4663 10979 24439 51648 104125 201191 374152 672192 1170475 1981047 3267229 5262300 -20 30 32 36 68 185 518 1367 3392 7978 17902 38496 79587 158627 305671 571375 1040288 1854006 3253320 5657156 9811858 -24 34 58 112 215 389 659 1053 1602 2340 3304 4534 6073 7967 10265 13019 16284 20118 24582 29740 35659 -28 50 76 101 126 162 239 423 850 1803 3884 8373 17940 38029 79551 164159 334592 674792 1348388 2670725 5240402 -6 28 60 99 142 186 228 265 294 312 316 303 270 214 132 21 -122 -300 -516 -773 -1074 -15 35 83 170 313 542 915 1559 2760 5130 9888 19312 37464 71390 133214 243998 441141 792793 1425825 2579170 4703067 -16 33 67 118 181 243 279 249 112 -102 -88 1182 6303 20868 55712 130223 276992 548079 1023161 1819798 3106001 -5 11 17 23 29 35 41 47 53 59 65 71 77 83 89 95 101 107 113 119 125 -3 -4 -12 -13 21 153 496 1228 2607 4986 8828 14721 23393 35727 52776 75778 106171 145608 195972 259391 338253 -4 23 71 160 299 494 748 1061 1430 1849 2309 2798 3301 3800 4274 4699 5048 5291 5395 5324 5039 -21 26 31 34 29 5 -57 -186 -414 -747 -1096 -1145 -128 3518 12662 32193 69987 138180 254805 445856 747847 -9 31 62 110 205 426 947 2108 4517 9189 17728 32558 57209 96664 157773 249740 384689 578315 850626 1226782 1738037 -13 16 30 71 167 367 758 1487 2780 4951 8414 13777 22261 37052 66970 135448 301067 702266 1650886 3821103 8618663 -11 19 47 123 291 608 1152 2068 3705 6947 13927 29448 63630 136561 286058 580098 1136307 2152823 3959591 7110229 12558601 -5 9 20 43 83 145 234 355 513 713 960 1259 1615 2033 2518 3075 3709 4425 5228 6123 7115 -15 31 60 111 193 316 504 829 1484 2937 6249 13700 29968 64313 134701 275967 556906 1117762 2254755 4612208 9615988 -23 35 60 115 234 475 930 1747 3173 5638 9935 17627 31966 59936 116767 235958 491706 1049212 2276709 4990886 10982149 -12 25 59 136 293 584 1077 1847 2984 4666 7391 12519 23345 47007 97629 201208 402876 777303 1443155 2582682 4467685 --3 9 47 135 311 630 1169 2037 3398 5525 8924 14615 24759 44017 82383 160854 322367 652253 1315537 2623555 5150795 -2 5 10 17 26 37 50 65 82 101 122 145 170 197 226 257 290 325 362 401 442 --4 -6 -2 10 22 13 -44 -158 -278 -243 250 1613 4196 7874 11252 10307 -3760 -47740 -151034 -362068 -756966 -5 11 17 23 29 35 41 47 53 59 65 71 77 83 89 95 101 107 113 119 125 -25 34 55 113 244 511 1037 2063 4053 7898 15328 29738 57785 112332 217615 417901 791397 1471766 2680305 4772635 8304630 -6 6 12 35 96 243 592 1406 3233 7146 15184 31219 62738 124554 246458 488644 971932 1935218 3841428 7567307 14734088 -10 37 83 157 270 445 734 1249 2237 4278 8775 19051 42585 95222 208596 442525 904788 1781491 3382187 6205049 11028720 -10 12 23 53 130 321 769 1760 3857 8183 17007 34899 70913 142637 283750 558419 1089359 2113367 4091778 7929318 15403483 -16 24 40 78 158 316 630 1285 2710 5824 12423 25723 51042 96554 173977 298962 490828 771136 1160410 1672092 2302558 --2 -3 5 33 93 198 362 600 928 1363 1923 2627 3495 4548 5808 7298 9042 11065 13393 16053 19073 -6 18 48 115 259 570 1240 2662 5613 11576 23286 45634 87138 162298 295300 525729 917200 1570126 2640220 4364781 7099349 -14 18 25 32 34 25 6 8 141 679 2196 5803 13639 29992 63835 134237 281144 585528 1204995 2433762 4799608 -5 14 40 111 280 650 1412 2896 5635 10442 18500 31465 51582 81814 125984 188930 276673 396598 557648 770531 1047940 -15 43 83 133 194 276 422 770 1682 3982 9362 21046 44873 91112 177601 335238 617425 1115657 1983773 3472911 5977044 -23 49 93 164 273 435 678 1069 1791 3344 6997 15687 35645 79128 168750 344034 670951 1255371 2261525 3936766 6644121 -5 23 52 93 155 261 454 803 1409 2411 3992 6385 9879 14825 21642 30823 42941 58655 78716 103973 135379 --4 2 14 32 56 86 122 164 212 266 326 392 464 542 626 716 812 914 1022 1136 1256 -13 35 66 100 129 142 119 13 -293 -1078 -2972 -7341 -17061 -38018 -81835 -170381 -342207 -659383 -1208682 -2080734 -3289587 -10 26 56 111 202 340 536 801 1146 1582 2120 2771 3546 4456 5512 6725 8106 9666 11416 13367 15530 -3 8 35 94 193 337 521 724 932 1247 2186 5368 14983 40823 104359 250545 569949 1238742 2588377 5222894 10210209 -9 17 33 70 169 422 1006 2234 4635 9078 16959 30490 53194 90866 153573 259825 444969 777283 1387353 2519314 4616675 -1 12 33 62 105 185 369 829 1966 4660 10784 24266 53244 114309 240623 497177 1009363 2016864 3976363 7758442 15023863 -15 25 49 96 183 345 645 1184 2111 3633 6025 9640 14919 22401 32733 46680 65135 89129 119841 158608 206935 -2 19 61 146 309 628 1272 2593 5302 10792 21694 42769 82256 153868 279935 497170 869070 1514685 2675139 4861228 9164251 -6 19 49 104 197 347 593 1046 2032 4428 10364 24557 56662 125197 263927 532382 1034222 1952271 3621122 6685061 12445361 -21 46 95 179 315 538 931 1685 3197 6206 11965 22473 40878 72351 126066 219442 386537 693434 1264591 2325355 4267009 -11 17 22 26 29 31 32 32 31 29 26 22 17 11 4 -4 -13 -23 -34 -46 -59 --5 -7 -8 -6 14 93 327 936 2420 5882 13645 30367 64997 134168 268066 520551 986473 1830895 3337518 5987256 10582936 -14 28 59 110 177 255 355 537 967 2021 4499 10104 22548 50100 111331 247641 549500 1209122 2621819 5573322 11573251 -12 23 44 82 144 246 429 785 1496 2889 5510 10220 18316 31680 52959 85779 134996 206987 309984 454454 653528 -12 29 53 84 129 208 360 664 1300 2685 5744 12450 26948 57953 123802 262705 552584 1147665 2343003 4683740 9143551 -7 -2 -16 -40 -83 -160 -290 -468 -574 -159 1989 8652 25607 64092 145107 307091 619903 1210398 2308644 4329594 8014103 --3 -7 -18 -27 -6 110 460 1317 3187 6998 14509 29233 58493 117847 240240 494203 1018741 2088039 4228012 8420949 16456976 -8 12 23 54 125 263 502 883 1454 2270 3393 4892 6843 9329 12440 16273 20932 26528 33179 41010 50153 -7 16 46 125 306 689 1451 2888 5479 9986 17607 30217 50809 84468 140715 239051 421299 777264 1494792 2952113 5880136 -1 -2 -5 0 29 115 322 770 1687 3519 7149 14301 28235 54874 104544 194553 352885 623340 1072511 1799054 2945777 -12 31 61 111 201 362 636 1076 1746 2721 4087 5941 8391 11556 15566 20562 26696 34131 43041 53611 66037 -14 21 34 78 195 446 913 1701 2940 4787 7428 11080 15993 22452 30779 41335 54522 70785 90614 114546 143167 --3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -16 22 31 43 68 144 367 942 2277 5165 11147 23252 47513 96021 192877 385325 763702 1495744 2883375 5453529 10098978 -12 21 32 43 57 90 193 496 1281 3090 6873 14180 27400 50049 87108 145411 234082 365019 553422 818361 1183379 -24 37 54 85 164 361 791 1620 3079 5523 9633 16999 31629 63566 137042 307905 699106 1569821 3444696 7346621 15201842 -11 35 74 147 295 588 1134 2108 3839 7031 13263 26026 52725 108314 221555 445311 872811 1662475 3074672 5524717 9657507 -8 15 25 47 109 274 668 1536 3359 7086 14565 29305 57788 111721 211954 395416 727506 1324121 2390113 4284603 7628287 -2 20 56 124 260 533 1057 2012 3686 6553 11404 19549 33108 55408 91501 148815 237946 373594 575640 870354 1291716 -0 -6 -1 38 160 454 1073 2277 4512 8569 15917 29389 54559 102470 195021 375567 729607 1424800 2788160 5456230 10672617 -23 50 87 130 175 218 255 282 295 290 263 210 127 10 -145 -342 -585 -878 -1225 -1630 -2097 -10 14 13 6 -8 -30 -61 -102 -154 -218 -295 -386 -492 -614 -753 -910 -1086 -1282 -1499 -1738 -2000 --4 -11 -22 -25 2 85 255 582 1286 3003 7358 18147 43704 101487 226631 487270 1010920 2028249 3943258 7442391 13659526 -15 20 31 66 162 397 935 2100 4483 9090 17563 32578 58706 104455 187185 344660 661156 1323941 2740284 5770239 12173035 -1 1 1 4 11 21 31 36 29 1 -59 -164 -329 -571 -909 -1364 -1959 -2719 -3671 -4844 -6269 -7 4 15 67 206 516 1151 2391 4758 9267 17940 34778 67467 130189 248018 463504 846185 1505918 2611085 4412909 7277308 -25 49 87 139 205 285 379 487 609 745 895 1059 1237 1429 1635 1855 2089 2337 2599 2875 3165 -14 22 52 127 293 630 1259 2347 4119 6907 11310 18615 31746 57175 108455 212329 418740 816524 1557120 2889287 5208587 -12 9 6 3 0 -3 -6 -9 -12 -15 -18 -21 -24 -27 -30 -33 -36 -39 -42 -45 -48 --10 -6 21 94 242 507 967 1786 3322 6371 12713 26270 55416 117368 246295 508125 1027594 2037916 3972401 7633582 14504290 -23 27 25 15 6 38 213 740 1997 4613 9573 18349 33060 56664 93185 147978 228035 342335 502241 721947 1018978 -9 8 10 25 77 204 455 884 1541 2460 3644 5047 6553 7952 8913 8954 7409 3392 -4242 -16939 -36491 -12 33 61 95 134 177 223 271 320 369 417 463 506 545 579 607 628 641 645 639 622 --1 0 15 64 182 437 961 1994 3941 7442 13455 23352 39028 63023 98657 150178 222923 323492 459935 641952 881106 --7 -12 -13 6 80 283 758 1757 3691 7190 13173 22928 38202 61301 95200 143663 211373 304072 428711 593610 808628 -4 -3 -19 -43 -71 -100 -124 -100 149 1149 4215 12343 32045 77166 176791 391314 844158 1782301 3687773 7476105 14838237 -14 35 74 133 209 294 376 445 514 669 1174 2715 7057 18873 50566 134004 346942 868595 2089930 4822005 10673209 -28 49 85 143 230 353 519 735 1008 1345 1753 2239 2810 3473 4235 5103 6084 7185 8413 9775 11278 -5 11 39 105 234 472 902 1663 2971 5141 8609 13953 21912 33402 49528 71591 101089 139711 189323 251945 329718 --1 15 46 102 206 412 834 1687 3342 6407 11878 21473 38385 68886 125504 232902 438137 827695 1554614 2880152 5235864 -16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 --2 1 8 23 48 74 78 47 75 619 3065 10873 31803 82202 195310 437481 939876 1959741 3996514 8005971 15783282 -12 18 27 48 109 275 668 1497 3115 6129 11598 21363 38562 68392 119189 203906 342078 562372 905829 1429914 2213499 --6 -2 21 91 263 628 1318 2507 4408 7266 11347 16923 24253 33560 45004 58651 74438 92134 111297 131227 150915 -5 10 22 63 166 375 745 1342 2243 3536 5320 7705 10812 14773 19731 25840 33265 42182 52778 65251 79810 -8 10 25 58 124 257 522 1050 2127 4385 9174 19247 39973 81414 161769 312909 589010 1079644 1929119 3364376 5734362 --4 5 37 109 246 487 891 1543 2560 4097 6353 9577 14074 20211 28423 39219 53188 71005 93437 121349 155710 -8 23 66 146 274 484 866 1622 3173 6365 12845 25704 50513 96910 180931 328316 579062 993539 1660532 2707622 4314372 -15 24 47 101 219 461 942 1889 3738 7293 14004 26487 49506 91763 169019 309422 562865 1018841 1844115 3367746 6276313 -24 37 48 63 99 200 478 1197 2935 6893 15473 33322 69158 138923 271284 517458 969114 1791161 3281122 5974137 10823045 -6 31 74 140 242 421 778 1513 2978 5773 10953 20500 38406 73113 142846 286900 588888 1223735 2551772 5306858 10973880 --1 0 3 19 77 243 656 1580 3481 7173 14148 27322 52601 101906 198601 386649 745283 1411526 2613529 4718421 8299181 -7 6 15 60 181 430 873 1619 2908 5297 10003 19529 38873 77994 156916 316071 636449 1277132 2542203 4995278 9648529 --5 -12 -23 -38 -57 -80 -107 -138 -173 -212 -255 -302 -353 -408 -467 -530 -597 -668 -743 -822 -905 -13 24 39 78 189 465 1064 2227 4280 7599 12514 19126 27002 34684 38881 33085 5135 -67086 -223135 -532690 -1116397 -1 9 15 27 72 202 499 1079 2095 3739 6243 9879 14958 21828 30871 42499 57149 75277 97351 123843 155220 -6 9 15 20 19 3 -43 -140 -318 -624 -1101 -1591 -941 5412 31777 117414 360964 995315 2545498 6153517 14232263 -11 20 31 48 88 200 490 1154 2520 5102 9686 17522 30833 54180 97987 187244 382041 823848 1835153 4124588 9191574 -18 36 75 148 276 498 884 1551 2686 4584 7713 12822 21112 34494 55962 90113 143850 227308 355047 547560 833148 -1 -2 -5 -8 -11 -14 -17 -20 -23 -26 -29 -32 -35 -38 -41 -44 -47 -50 -53 -56 -59 -4 12 30 67 134 243 403 612 845 1040 1088 842 178 -824 -1429 854 13051 53877 171831 488950 1300771 -16 35 61 88 120 185 357 789 1756 3718 7464 14525 28299 56789 118630 255375 555241 1197591 2535234 5246790 10620275 -10 31 65 127 252 512 1040 2061 3930 7177 12559 21119 34252 53778 82022 121901 177018 251763 351421 482287 651788 -19 31 64 131 245 419 666 999 1431 1975 2644 3451 4409 5531 6830 8319 10011 11919 14056 16435 19069 -8 29 66 121 191 266 339 452 816 2057 5654 14649 34723 75746 153923 294672 536384 935229 1571186 2555489 4039695 -10 23 54 130 304 663 1334 2487 4335 7149 11354 17863 28953 50203 94312 188008 383760 778627 1543334 2965568 5512550 -3 -3 -12 -24 -39 -57 -78 -102 -129 -159 -192 -228 -267 -309 -354 -402 -453 -507 -564 -624 -687 -7 15 39 104 261 613 1365 2923 6091 12449 25048 49663 97086 187509 359353 687798 1324488 2582800 5119038 10310471 21026384 -12 15 32 66 121 219 439 992 2362 5571 12670 27636 58009 117906 233603 453802 868141 1639695 3060706 5646945 10298072 -4 -6 -20 -34 -43 -29 68 409 1369 3752 9219 21177 46630 99908 209804 432464 873340 1722587 3309714 6186423 11255537 -21 29 48 92 175 311 514 798 1177 1665 2276 3024 3923 4987 6230 7666 9309 11173 13272 15620 18231 -7 26 75 183 401 819 1592 2975 5367 9364 15821 25923 41265 63941 96642 142763 206519 293070 408655 560735 758145 -13 17 13 9 36 158 484 1194 2608 5351 10704 21309 42582 85604 173095 351591 715467 1452357 2925207 5814013 11350484 -2 12 32 74 157 307 557 947 1524 2342 3462 4952 6887 9349 12427 16217 20822 26352 32924 40662 49697 -17 30 52 102 224 516 1174 2562 5326 10575 20152 37018 65806 113762 192763 324215 550907 964104 1761400 3362618 6629320 -6 18 49 103 187 311 497 818 1503 3173 7321 17217 39499 86779 181608 362080 689327 1257755 2211892 3783590 6389642 -4 16 35 61 94 134 181 235 296 364 439 521 610 706 809 919 1036 1160 1291 1429 1574 -18 42 77 137 261 533 1111 2264 4414 8178 14403 24185 38861 59961 89105 127828 177314 238018 309153 388017 469133 --7 -15 -16 14 108 310 695 1417 2793 5429 10406 19592 36256 66359 121211 222636 412401 768461 1431572 2647054 4827980 -17 39 67 98 127 145 140 114 140 493 1898 5946 15736 36807 78429 155326 289907 515083 877749 1443010 2299229 -10 15 32 82 205 482 1082 2345 4912 9913 19224 35804 64123 110692 184706 298811 470006 720691 1079872 1584534 2281193 -14 32 60 109 205 390 723 1298 2308 4194 7931 15529 30881 61192 119398 228262 427250 783884 1412086 2501117 4360133 -12 28 74 171 346 627 1042 1628 2458 3701 5742 9406 16352 29730 55226 102657 188320 338346 593362 1014821 1693422 -9 33 82 166 301 529 957 1831 3677 7568 15620 31890 63965 125740 242286 458515 854997 1577711 2895694 5315506 9811937 --6 -1 14 47 126 319 759 1683 3510 7012 13682 26482 51270 99366 191931 367108 691218 1275725 2302190 4058033 6986622 -10 6 -5 -16 -15 24 174 636 1917 5201 13089 31008 69768 149991 309458 614830 1179708 2191616 3951231 6928056 11837747 -12 17 19 18 14 7 -3 -16 -32 -51 -73 -98 -126 -157 -191 -228 -268 -311 -357 -406 -458 -21 42 79 133 207 311 474 774 1396 2728 5513 11109 22021 43180 85188 172322 361107 780610 1714475 3758677 8109983 -19 40 81 155 293 563 1104 2182 4281 8253 15567 28718 51883 91942 160018 273731 460407 761534 1238813 1982213 3120505 --6 -1 29 111 286 614 1182 2115 3590 5853 9239 14195 21306 31324 45200 64119 89538 123227 167313 224327 297254 -9 9 19 59 161 373 778 1555 3127 6463 13621 28626 58755 116229 220164 398378 688253 1135269 1787015 2679389 3810269 --2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 -28 40 60 107 223 487 1028 2048 3888 7218 13519 26174 52750 109544 230373 483202 1000939 2037155 4064417 7943548 15208324 -23 51 88 131 179 241 365 717 1756 4577 11548 27485 61846 132863 275304 554921 1095148 2126502 4079099 7759262 14693112 -7 16 30 50 89 190 457 1112 2596 5734 11994 23914 45890 85768 158135 290944 538237 1003364 1879366 3516242 6528815 -26 34 47 85 182 389 784 1500 2796 5227 10026 19913 40743 84810 177464 370417 768600 1584494 3248139 6629639 13487222 -14 13 3 -17 -42 -47 40 393 1412 4008 10230 24565 56497 125349 269180 560760 1135678 2240835 4316449 8131919 15006308 -27 45 78 151 302 590 1120 2090 3865 7093 12904 23281 41768 74790 134010 240344 430503 767237 1354826 2361803 4053410 -12 30 69 145 290 560 1042 1863 3214 5411 9029 15192 26258 47563 91865 190106 415769 936541 2118186 4725540 10303103 --2 10 35 81 159 279 443 635 813 920 961 1273 3310 11699 39236 118346 326191 837605 2032938 4710820 10495116 -18 31 38 40 39 48 129 479 1601 4624 11873 27837 60740 124987 244834 459718 831780 1456221 2475248 4096494 6616933 -15 24 33 42 51 60 69 78 87 96 105 114 123 132 141 150 159 168 177 186 195 --4 0 24 91 234 503 978 1796 3217 5790 10759 21012 43184 92062 199316 429934 911742 1886248 3793006 7405037 14039898 -16 34 78 159 288 482 777 1253 2076 3562 6268 11115 19548 33738 56831 93249 149048 232338 353770 527095 769800 -2 8 19 48 123 290 615 1190 2152 3727 6315 10649 18117 31478 56512 105757 206630 418270 864951 1799758 3721671 --6 -10 -12 -2 38 144 384 871 1770 3294 5684 9168 13894 19832 26640 33489 38842 40182 33684 13826 -27066 -26 41 69 123 226 431 854 1728 3494 6953 13511 25557 47022 84175 146720 249266 413250 669401 1060841 1646927 2507946 -22 30 45 68 96 135 221 445 978 2092 4173 7722 13340 21693 33453 49211 69358 93930 122413 153504 184824 -7 18 45 98 190 352 656 1246 2377 4462 8127 14274 24152 39436 62314 95582 142747 208138 297025 415746 571842 -12 17 24 33 44 57 72 89 108 129 152 177 204 233 264 297 332 369 408 449 492 --8 -5 6 23 56 137 327 719 1448 2755 5232 10528 23069 53827 128046 300485 685010 1512056 3241282 6784892 13953044 -15 39 88 174 320 584 1093 2092 4035 7781 15008 29024 56255 108890 209612 400332 758867 1431347 2694964 5077138 9575526 -20 41 75 137 252 458 817 1439 2529 4475 8008 14496 26526 49195 93241 182874 375062 805225 1790549 4052739 9177060 -8 7 6 24 102 318 811 1819 3744 7283 13731 25698 48723 94679 188588 381812 777139 1576007 3166374 6283137 12292741 -17 41 81 156 294 531 924 1593 2807 5126 9606 18068 33426 60064 104249 174567 282373 442255 672527 995788 1439614 -17 32 65 139 290 569 1052 1857 3159 5193 8254 12754 19490 30432 50607 92178 182963 384282 829153 1805853 3942912 -12 28 50 94 190 397 845 1819 3900 8178 16552 32132 59758 106651 183211 303977 488764 763992 1164222 1733914 2529422 -18 18 21 37 79 160 287 464 727 1245 2532 5826 13702 30997 66136 132959 253160 459460 799647 1341627 2179641 -5 8 11 14 17 20 23 26 29 32 35 38 41 44 47 50 53 56 59 62 65 -7 16 37 79 160 319 645 1351 2940 6531 14433 31070 64360 127617 241954 439009 763641 1276214 2054585 3197669 4836732 -2 -6 -3 22 83 207 452 935 1869 3616 6798 12588 23450 44843 88801 180935 373412 768062 1556259 3086058 5972853 -9 23 63 146 300 577 1080 2012 3752 6954 12650 22323 37926 61934 97915 153188 247647 438065 877257 1945628 4523676 -13 34 79 171 341 637 1143 2002 3441 5812 9696 16173 27449 48165 87914 165790 318229 612030 1165333 2180567 3995069 -23 31 39 47 55 63 71 79 87 95 103 111 119 127 135 143 151 159 167 175 183 -12 27 42 69 150 369 873 1912 3905 7544 13979 25214 45031 81118 149761 285849 563981 1143365 2364740 4961330 10515881 -13 21 29 37 45 53 61 69 77 85 93 101 109 117 125 133 141 149 157 165 173 -17 41 78 132 227 423 836 1675 3327 6558 12969 25967 52711 107842 220459 447060 895557 1769905 3452992 6660448 12726811 -23 44 77 136 248 457 837 1529 2824 5321 10196 19625 37411 69872 127054 224340 384533 640498 1038455 1642022 2537114 -0 7 30 95 242 525 1012 1785 2940 4587 6850 9867 13790 18785 25032 32725 42072 53295 66630 82327 100650 -15 28 57 126 268 523 940 1583 2533 3873 5655 7910 10940 16536 31555 76636 204838 537453 1326300 3051149 6552691 -4 2 -4 -13 -24 -36 -48 -59 -68 -74 -76 -73 -64 -48 -24 9 52 106 172 251 344 -13 24 43 80 154 310 652 1394 2931 5932 11457 21100 37160 62842 102490 161854 248393 371616 543463 778728 1095526 -6 22 53 110 218 433 863 1693 3214 5856 10225 17144 27698 43283 65659 97007 139990 197818 274317 374002 502154 --8 -13 -15 -7 26 122 362 894 1966 3979 7569 13711 23818 39844 64673 104015 173514 320425 680803 1615087 4003952 -7 27 69 137 237 380 595 965 1697 3245 6535 13412 27573 56526 115640 236357 482563 982743 1992189 4011287 8005981 -5 16 39 74 121 180 251 334 429 536 655 786 929 1084 1251 1430 1621 1824 2039 2266 2505 \ No newline at end of file diff --git a/input/day10.txt b/input/day10.txt deleted file mode 100644 index 516a0d4..0000000 --- a/input/day10.txt +++ /dev/null @@ -1,140 +0,0 @@ --F|..FF.F77|7-777FLF7F|7-F--F--FF7F7F.FL-|-|777F-7FL7F77---|-7-77.F-LLF7FF|-F-7.FF77F|7---F7.7FF7-J7-FF.F77F--.-|.F.F7L7--J.FLL7J7L|J7L|.F77 -..|--7LJ7.LJF7J-|-7F|-JL7L77|JF7--L-L|.|-77.L-LL7|7.FJ|77-FJJF..F7.7JL7L|J|LJFJFFF777.LFFL||.F7||.FF.-J-F-F|7|-L-7J7J||L|JJF7J-L|L7.LF.--JL| -F-7LLJF-JF|-L|JF|FLFLJ-FJ|.FLJLJJ-F|7L|7.JJ-||.FJL77L7L77F77--JJ7|-FJ||L|J7F|--FLJLF77-F-7|L7|||L77.-LJL7.JLFJ777|||.---F.L7JFF.J-LL-J-|-7FL -F|L7.|.L7F--J.FL7F-||||F7L|7|FLLJFFJ-FJ|-J|.JJ-L-7L7FL7L77JLL7JJ7FFJ-F7-7.FF7-F7.LJL|77L7LJFJ|||FJ|.|J..|..F|FFF-L-LFJLFJ--|7--7.|7FJ7||.FL. -F-.F-77|F|-J.FF-|JFL|-F-J7.L-|7FFL.|.F-L--7.||F77|FJF7|FJ-77FFF.||.7-FF7|-FJ|F||7.L7.-J.L-7L7||||F7FJJL7L7.FL|L-7|7-L77J-|LJJ.|7F777JLFJLJ.F -|JL7L|F-F|-..F-J|F|LF-J-|7-.L-7F7JFJ|JLJ-|F-77|L-J|J|LJL7L|7L-JFL|-F-L|L-7|FJFJ|77F77LLFF7L7||||||L7JF.L7---.LF7|JJ-L|-F---J.F--7JL77|LF-77| -||.|.L|J|.FJ--|7L|J.||-7.7FJFLL|||.F|JJ.F7L7L7L--7L-JF7FJ7L|FL.77|.7..L7FJ||FJFJF7F7F7F-JL7|||LJLJFJF77FF7.L|7LLJL--|JLFL7|F-7|.LJLLF7.LF7|J -L-JF7.|FFL7.FF|-J|LLJ|F-7LFJ--FJFFJL|--FJL7L7L7FFJF7FJ|L7J.F--L--J-LFF-JL7|||FJ||LJLJ|L--7LJLJF7F7L7||F7||F7JF|LL7LF--F|J7||LF--...FJ-|7L|J7 -7..L..7FL.|F7-LJFJFL-LJ-FJ|L7.L|-JJ7|J|L-7L7L7|FJFJLJ.|FJ|FJL-7JFJ|7LL7F7LJLJL-7|F--7|FF7L--7FJLJL-J|||LJLJ|--7.L-7F7.LJFF|J-|7LL7--|F--7JLF -|.LJ|7|7.F-LJJ|FJF|7.LJLL-JLJ--J.L.7JFF-7L7|F||L7L--7-||----F7L-JLF77FLJL-7F---J||F-JL7|L7F-J|F7F-7FJLJF---J.|L-7-7JF|JLJJ|--L--L|.7LF7-.FFL -L||L|-F7---J.F7JL|JF77L7-|JFLJL77F-FF7L7|FJ|FJL-JF-7L7LJ7|F7-JJ|FFJLL-F---JL7F-7LJL-7FJ|FJL-7||||FJL7F-JJF7F7-J7||JJFF--|LLF7.L---7JF|F.F7|| -FF7.7.JL||F-7-|J.|7LL7|.77JFJ.LFF-.FJ|FJ|L7||F--7L7L7L--7F|J7LLFFJL.|FL----7||FJ.FF7|L7|L7F-JLJLJL7FJL7FFJ|||..|--7F|JJFFJLLJ-7JJLF.FFJF-|.- -|JJL|F|F|-|-|7|.FL-7LF-F-77|-|-L||FL7|L7|J|LJ|F-JFJLL---JF7J|-F7|7.--F7JF7FJLJL7F7||L7|L7|L-7F----JL7FJFJFJ|L--7J|FF7J.FJ7-|7LJ-7J|-.|F7-7.. -J7LF|7FFJ|F7|7|-7|LL-JLL7L-7-F77F-7L|L-JL7|F7|L-7|F7|F7LFJ|7|-||-F7-FJL7|LJF7F-J||||J||-||7FJL---7F-JL7|FJFJF--J-F-JJJ.7.J7L77|.7JLLF|7|FFJ7 -LF-7.|FJJFLL7|FF|7.F||LLL7FJFJL7L7L7L--7FJLJ||F-JLJL7||FJFJF7.||FJL7L-7|L7FJ||F7|||L7||FJL-JF7F7FJ|F--J|L7L7|F-7-|.||JF-7-|JLL-7L-.FFL-|-JL| --L7|7L7J|F7||-F-JL.77|.|.|L7L7FJFL7L-7FJL7F7LJL--7F7LJ|L7|7||FJ||F7L7FJ|7LJFJ|||||L7|||L----J||LJFJ|F7FJFJFJLJFJ.-FF-F7|FF7FL|L|FJ-7F|.L|7L| -L7JL7-J--FF7|-|--JFFJ.FF-JFJ.||F--JF7|L-7||L7FF-7||L--JFJL7||L7|LJL7|L7|F7-L7LJ|||FJ||L--7F7FJ|F7L7LJ||FJ.|F--J.|.7|-||F7|L77JJLJFJL--7-|7.J -FFF.LF-7FF|-FFJ|LJ|.J--L-7L-7||L--7|LJF7|||FJFJFJ||FF--JF-J||FJL-7FJ||||||F7L7FJ||L7|L-7FJ||L7||L7L7FJ|L-7||F7F7F7LF7|||||FJ7-.|.7L-77|JL7J. -7JL||.FLL-L--JFLJJ7..LL-LL7FJ||F7FJL7FJ||||L7|FJFJL7|F-7L7FJ|L7F-JL7L-JLJLJL-JL7|L7||F7|L-J|FJ||FJFJL-JF-J|||||LJ|FJLJ||LJL-7-JJ7|7-LF.FFJ.- -7||L|7FLLLJF|7LL7F-7-7||.FJL7||||L-7|L7|||L7|||||F-J|L7L-JL7|FJ|F-7L--7F--7F--7||FJ|LJ|L-7FJL7|||FJF---JF-JLJLJF-JL--7||F---J77FF|JJ-|77|FJ7 -F-7FJL-J.F|7F|JF77J||FFF-JF7LJLJL-7||FJLJL-JLJL7||F7L7L7F7-|LJFJL7|F-7LJF7LJF7||||FJF-JF-JL-7||||L7|JF77|F-----J7F---JLJ|F7-F--7JJL|.LJFL7L7 -L.L|L-F-|77-JJ7LF7F-7-FJF7||F----7|||L--------7|||||FL7LJL7L7FJF-J|L7L-7|L--JLJLJLJFJF7L7F7FJ|||L-JL-JL-J|.F7F7F7L----7FJ|L7|F-JJF-7LJ7|LJL| -L--L-JF||LLJ|-FF|||FJ-L-JLJLJF---J|||F7F7F-7F-J||||L7FJF7FJFJL7|F-JFL7FJL----7F----JFJL7LJ||FJ||F-7F--7F7L7|LJ|||F7F7FJL7|FJ||F7F7.FJ|L--L-| -.L7FJ-FJJ.LFJ7-FJLJL7F---7JF7L---7LJ||||||FJL-7LJ||FJ|FJLJFJF-J|L7.F7||F7F---JL7F7F7L7FJF-J|L7||L7|L-7||L-JL7FJ|LJ||LJF7LJL-JLJLJL-7.LF7.J7J -FF||L7L7|F.|F|7L7F--JL--7|FJ|F7F7L-7||||||L7F-JF-J||FJ|F7|L7|F7|FJFJLJ|||L---7FJ||||FJL7|F7L-JLJFJL--JLJF-7FJ|FJF-JL7FJL----7F7F7F-J..|L7F-. -FLJJ7|-7-F|-7J-FJL--7.F7||L7LJLJL7FJ||||LJFJL-7L-7||L7LJL7FJLJ||L7L--7|||F7JFJL7||||L7FJLJL7F7F7L-7F7FF7L7||FJL7|JF-JL-----7||LJ||J.F7.7L|L7 -|F7F|LFJL||JL||L7F--JFJLJ|LL-7F7FJL7LJ|L7FJ7F7L-7|||7L7F-JL7F-J|FJF7FJLJ||L7L-7||LJL7||F-77LJLJL7FJ|L7|L7|LJ|F-JL7L-7F-----JLJ7FLJLFL|7JF7J| -777JLFJ7-FF-F7-L|L7F7L--7|F7|LJ||F7|F-JFJ|F7||LFJ|||F7||F7FJ|F7|L-J|L7F-JL7L7FJLJF--J|LJFJF7-F--JL-JFJ|FJ|F-JL-7FJF-JL---7F7JF7F7JFJJ|FJFJ|| -J||FF|JLL-JLFF77L7|||FF-JLJL7-FJLJLJL-7|FJ|||L7L7LJLJLJ||LJFJ||L--7|FJ|.F-JFJ|F-7L-7FJF-JFJL7|F--7F7|FJL-JL--7FJ|FJF-----J||FJLJ|-|..|L-J.LF -FF--FJLF7LF-7||F-JLJL7L----7L7|F----7FJ||FJ||FJ|L-7F---JL7FJF||7F7||L7L7L-7|J||LL7FJ|FJF7L-7|LJF-J|LJL-7F----JL7||FJF7F---JLJF--JFL-FJ.L7-FJ -LJF-.|LL-.L7LJLJF--7FJF7FF7|FJLJF7F7||FJ||FJ||F7F-JL--7F7||F7||FJ|||F|FJF-JL7|L-7||FJ|L|L7-||F7L-7L7JF-J|F7F7F7|LJL-JLJF----7L7-|7.||.-LLF|J -JJ-|7.FF.|FL7F7FJJFJL-JL-JLJL7FFJ||LJLJFJ||FJ|||L-7F--J|||||LJ|L7LJ|FJ|JL--7LJF-JLJL7|FJFJFJ|||F7L7L-JF-J|||||||F---7F7L---7|FJ||JL-J-|J.LJ7 -L|FJ|F-LJLJL||LJ.FJF-----7F-7L7L7|L---7|J||L7||L7FJL7F7|||||F-JL|F-JL7L7F-7L7FJF7-F7||L7|.L7|||||7L--7|F-JLJLJ||L7F7LJL---7||L--77L-JF|7-FF7 -|FL-L|-LF|7FLJ.F7L-JF---7LJLL7L7|||F7FJL7|L7|||FJL-7LJ||||LJ|F7FJ|F7FJFJL7|FJL7||FJ||L7|L7FJ|||||F-7FJ||F-----J|FJ||F--7F7LJL7F-JJ77J|J7-|L- ---JFFJ7-L-FF7|7||F-7|F7FJF7F7L7|||FJ|L7FJ|FJ||||F77L7FJ|||F-J||L7|||L7|F7|||F-J||L7||FJL7||FJ||||L7||FJ||F7F--7||FJLJF-J|L-7L||.L7F-FJ.|.|LL -.|F-JLF.LL|JF7FJLJFJLJ||FJ||L-JLJ|L7|FJ|FJL7||||||F7||FJ||L7FJL7||||FJ||LJ||L-7|L7|||L7FJ||L7|||L7|||L7|LJ||F7LJLJF-7L--JF-J7LJ7FJLLJFJ.|L7J -J-J...|-7-F7||L--7L7F7||L7|L7F7F7L-J||FJL7L||LJLJ||LJLJFJL7||FFJ|||||FJ|F-J|F-JL7||||FJL7||FJ|||FJ|LJ.LJFFJ||L-7F7L7L7F7FJL|FFF7-J7JFF-7JJ.F -|F-FL7|.F-J|||F7FL7||LJ|FJL7LJLJL--7LJL-7L7|L7F--JL-7JFJF7||L7L7|||LJL7|L-7|L7F-J||||L--J||L7|||L7|F-7-F7L-JL-7||L-JJLJ||F7|F7||.||LL|JLJ.|7 -FJ-J-|F7L-7LJLJ|F-J|L-7LJF7|7F----7L---7|FJ|FJL7F7F7L7L-J|||FJFJ|||F-7||F-J|FJ|F7LJ|L-7F-J|7||||LLJL7|FJ|F--7FJ|L-7F7F7LJ|L7||||.F7.F|.L-FFJ -||F|.L||.FL---7|L-7L7FJF7||L7L---7|F--7|||FLJF-J|LJ|FJ7F-J|||J|FJLJL7LJ||F7|L7||L--JF7|L-7L7||||F---JLJFJ|F7LJ|L-7LJLJL--JFJ|LJL-JL7L7-J-F7- -F-F77.||F7-F--JL7FJFJL-JLJL7L----JLJF7LJ|L-7FJF7|F-J||FJF-J||FJL-7F7L-7|||LJ.||L-7F7|||F-JFJ||||L7F7F-7L-J|L---77L7F-7F7F-JFJF--7F-J-JF..-|. -JF|L--JLJL7L--7FJL7|F7F7F77L-7F----7||F7L7FJ|FJ|||F7L7L7L7FLJ|F-7LJL7F||||F--JL7FJ|||LJL7FJFJ|||FJ||L7L7F-JF---JF7LJLLJLJF7|FJJLLJJ|LFF-FLJF -L-L--7F--7|F7FJL7FJLJLJLJ|F-7LJF---J|||L7LJF||FJ||||FJFJFJF--JL7|F-7L7LJ|||F-7FJL7|LJF7FJL7|FJ||L7|L-J7LJF7L----JL-------J||L---777.LL--JFL7 -LJLF-J|F-JLJLJF7LJF-7F7F7|L7|F7L---7|LJFJF-7||L-JLJ||L|FJ.|F-7FJ|L7L7L7FJ||L7LJF7||-FJLJF-J||FJL7LJF-7F7-|L-7F7F--7F7F7F-7LJF-7FJ7.7.|7LF7L7 -F7JL7FJL---7F7|L7FJFJ||||L-JLJL--7.LJF7L-JFJLJF----J|FJL7FJL7|L7|FJJL-JL7||FJF7|LJL7L-7FJF7LJL7FJF7L7LJL7L-7LJ||F7LJ||||FJF7L7|L-7-F-7FF7--L --.FJLJ|F--7||LJL||7L7|LJL7F---7F7L---J|F7FJF7LL7F---JL7FJL7FJL7|||JF7F77||LJFJLJF--JF-JL-JL--7LJ-|L-JF-7L--JF7LJ|L-7LJLJL-J|FJ|F-J-JFLFJL7FL -.FJLFF-JF7LJL7F-JL7FJ|F--J|.F-J|L---7FLJLJ7||F-JL7F---JL-7|L-7|||L-JLJL7LJF7L--7L-7JL-7F7F---JFF7L7F7|FJF7F7|L--JF7L7F7F-7FJL7LJFJ-J|JF-JF7| -.-F.FL-7|L7F-JL-7FJL-JL---JFJF-JF---JF7F---J|L---JL7F7F7FJL--J||L7F7F--JF-JL---JF-JF--J|LJF-7F7|L7||||L-JLJLJF7F7|L-J|LJFJL7FJJ--7L7J-7|.LJ7 ---L7|.LLJFJ|F---J|F7F7LF7F7L-JF-JF-7FJLJF7F7L---7F-J||||L---7.LJFJ||L-7-L7F7F7F7L77L7F7L--JFJ||L7|LJLJ.F-----JLJLJF7FJF-JF7LJ777||||.FJ|JJJF -|.L7FJ7|LL-JL--7FJ|LJL-JLJL---JF7L7LJF--JLJ|F---JL7FJLJ|F---JF7FJFJL-7L-7LJ||||L7|F-J|L7F-7L7|L7|||F7FFJF7F------7||L7L--JL7F7F77|-F7L7JLJ.| -L7FL7.|FF7F7JF7LJ7L--7F-7F---7FJL-JF7L---7FJL---7FJ|F--JL--77||L7L--7L7FJF7LJLJFJ|L7FJFJL7|FJL7LJL-J|FJFJLJF7F7F7LJL-JF----J||||F7JF|..FJ|FF -FL--L|JFJLJL7|L7F7JF-J|7LJF-7LJF---JL7F7FJL-7F7FJ|FJ|F7F7F7L-JL7L-7FJ-||FJ|.F7FJFJFJL7L7FJ|L7|L7F7F7|L7|-F7|LJ|||F--7FJF-7F-JLJLJL-7|7FF-|7J -L7..FF-L---7||FJ|L7L--JF--JFJF7L----7||||F7-LJLJFJL7LJ||||L7F-7L7F|L7L||L7|FJLJFJFJF7|FJL7L7|F7LJ||||7LJFJLJF7LJ|L-7LJFJFJL7F---7F7L7JFL7LF. -L7.7|L7FF--JLJL7|FJF7F7L--7|J|||F7FFJLJ|LJL----7L7FJF-J|LJL|L7L-J7L-J|LJFJLJF7FJ-L7|||L7FJ-|||L7-LJ|L--7L7F-JL7FJF-JF7L7|F7|L--7LJ|FJ77L-LL- -F|-JJFLL|F----7||L7||||F--JL7||FJL-JF-7|F-7F---JL||FJF7L-7FJFJ-F--7JLF--JF-7||L77-||LJLLJF7LJL7|F7LL--7L7LJF--JL-JF7||FJLJLJF7FJ|.LJ|L7.JLJJ -|-77.|JFLJF---J|L7||LJLJF7F7LJLJF7F7L7|LJ-LJF-7F7LJL-JL7FJL7L--JF-J|.|F7FJL||L7|F-J|F----JL---JLJL-7F-JFJF7L---7F-J||||F7F7FJLJLF-77|.|7J||7 -JLL--|7F7FJF7F7L-J|L-7F-JLJL-7F7|LJL-JL-7LF7|FJ|L7JF7F7LJ7FJF7F7L--7-LJ|L7-LJJLJL-7|L----7F-7F-7F-7|L-7|FJL---7LJF-J||||LJLJLF7FJFJF-7||--J7 -|.F-7JFJ|L-JLJL--7|F7LJF-----J|LJ7F-----JFJLJ|FJFJFJLJL--7|FJ||L--7L7JFL-J-F-----7LJ.F---J||LJ-LJFJ|F7||L----7L-7L--JLJL7F---JLJFJ-|FJ7JL-LJ -L-77J7L7L--------JLJL--JF7F7F7|LF7L7-F---JF7FJL7L-JF7F7F7|LJFJL-7FJFJL|7L7.L-7F-7L---JF--7L7F-7F7L7LJLJL----7L7|L---7F7FJ|F---7FJFL|L--7J-L| -|7||-LJ|F-------7F7F-7F-JLJLJ||FJL-JFJF---JLJ|.L7F-JLJLJ||F-JF7FJL7|JF7J.|.F-J|-|F-7F7|F-JFJL7LJL-JF-7F7F--7L-JF7F7|LJ|L-JL--7LJ|77|F--J7F7. --L7L7LLLJF--7F--J|||FJL7F---7LJL7F-7L7|F7FF7F7-FJL7F7|F7LJ|F7||L-7LJ.|.|F|-L-7|FJL7|||||F7|F7L-7F-7|FJ|LJF7|.F7|LJL7F7|F7F7F7L7F7-FJL-7JFF|7 -|L7||J7FFL-7LJF-7|||L-7|L7F7L---JL7L-JLJL-JLJL-JF7LJL-JL7FJ|||L-7L-7.|-FJL-J.LJL7FJ|||||||||L--J|JLJL7|F-JLJFJ||F--J||LJ||||L7LJL7|F7FJ7F7L7 -|LLJ|-|-F.FL7FJFJ||L77||FJ||F-----JF--7F7F7F----J|F7F---JL-J||F-JF-JF-.JLFLJL7.LLJFJ||||||||F---JF---J|L---7|FJ|L---JL-7|||L7L7F-J||LJLF7-J7 -7-|F|J.-JFF7LJ|L7|L-JFJ||FJ||F---7FJF7LJLJ|L---7FJ||L-7F7F7F||L7FJJ-L-FJFJ7.JJ7L|7L7|LJLJLJLJF7F7L----JF7F7LJL-JF--7F7FJ||L7|L|L--JL7F7||..| -|-F7L7JJFFJL--7LLJF--JFJLJJLJL--7|L-JL--7FJF7F-JL-J|F-J|LJL7LJ|LJ|JFJ.|FL-J7.||JLJ7LJFF7F7F7FJ||L--7F--JLJL-7F-7L-7LJLJFLJFJ|FJF7F7FJ|LJ|J-L -7.|J7LJJLL7F-7L--7L---JF7LF7LF--JL----7FJ|FJ|L----7|L--JF--J7|LJ-J-7.7--JJ.|7F7FL7LF--J|||||L7|L--7LJF-----7||FJF-JF--7F7JL-J|FJLJ|L-JF7|JJ. -L|7.L|7-|-LJ|L7F7L77F--J|FJL7L-7F7F--7LJL||FL-7F7FJ|F---JF---7J.|JFLFJJ|LFF|J|L7F-LL7F7||LJL-JL7F-JF7|F----J||L7L--JF7LJL-77FJ|F--JF7FJLJ.F| -7J777LF7-F7F-7||L7L7L--7|L-7|F7LJLJF7L7F7|L-7JLJLJJ|L----JF--J-77FJ7|J.--7F-.7FJJ7LFLJ||L-----7|L-7||||F-7F7LJ.L7F7FJL----J7L7|L-7FJLJJJ|-77 -||||7F|L7|||FJLJ7L7|F7FJ|F7|LJL----JL-J||L--JF7F7F7L7F7F7FJ||||J||-FLJ..F-7.FL7JLJ.F7FJL--7F--J|F7LJLJLJFJ||.F7LLJLJF-7F7F--7LJ-FJ|7L7..LLL7 -L-F|.FL7|||||F7F7FJ|||L7LJLJF--------7FJL7F--J||LJL7||||LJ|-|JFJFJFFL7F-L-|F-7.F7FFJLJF7F7LJF-7LJL--7F77L-JL-J|F----JFJ|||F-JLF7|FJ-7J-J.|7J -|-F7LF-J||||||LJ|L7LJL-JF-7FJF------7LJF-J|F--J|F--JLJ|L7-F-7F--.77-JFFLJFL--|--F-JF--J||L--J.L----7LJL-------J|F----JFJLJL---J|LJFLLJ.L7JF7 -77|||L-7LJLJ|L-7|FJF7F7FJFJL7|F7F--7|F7L-7|L7F-JL---7JL7L-JFJ7.|.FJ-7-7J.|JLLJFLL--JF--J|F---7F7F7FL-------7F7FJL----7|F---7F7FJJJ-FJ-F-|J.7 -|.-LF-7L---7|F7|LJFJ||||.L7FJ||LJF-JLJ|F7||FJ|F-7F--JFFJF7FJJ7-|-JJF|.|7..7-7|LJL7JLL7F-J|F-7LJLJ|F7F7F----J|LJF7F-7FJ|L--7||LJ7|.||LL|.--.- --FJ7L7L----JLJLJF7L7|||L7FJ|-LJF7L-7F7||LJ||FJL7LJF--7L7|LJJJJ|..LFJJF7LF-|..J.FLJJ|LLJF-J|-L-7F7LJLJLJF---7|F-JLJ7LJJ|F--JLJ.L7LF|7-FJ7J.77 -LJ-J-L7F7F7F7F7FJL-J||L-JL-JF--JL--J||||F-JLJF7L--JF-J7LJ.|-F-77FL|.--JF|J|7L7FF77FFFF7L-7|F-7LJL7F---7|JF7LJL--7F----JL---7F7.|-7--.F--FJ77 --F7JLLLJLJ||LJ||F---J|F-----JF-7F7F-J||LJF---JL---7L---7F-7|L7L7-FL7.|JL77||-F-J|7FJFJ|F7LJL7L---J|F--J|FJ|F7F7FJL7F7F----7||L-7-J7|.|-LJJ|| -.LL-J|JF--JL7FJ|L7F7FJ|F---7FJ-LJLJF-JL-7L77F-7F-7L----J|FJJF||F--|-LJ7LL-JL-L-7L7-FJFJ|||F-JF--7FJL7F-JL7LJLJLJF7LJ|L-7F7LJ|F-J7F-JLJ|F|||7 -F7L..L7L7F7FJL7|-LJ||JLJF--J|F-----JF--7L7L7L7LJFJF7JF-7||7-JLF-7FJJ7L.FL|7.FLLL7|FJFJFJL7L--JF-J|F-J|F--JF7F---JL7FJF7LJL--JL7FF7FLL.--J-FJ -LJJ7F-LJ||LJF-J|F--JL--7L--7|L------JF7L7|FJFJF7L-JL7|FJ|L7J|F|FJ-J-J-F|7LJF|7|FJ|L7L7|F7L----JF7|L--JL--7|LJF----J|FJL7F----7L-J|7F-7.F7-JJ -L|-|.|FFLJJFL-7|L-7F7F-JF7FJ|F-------JL-J|L-JFJL---7LJL-JFJ7F-JL7.|J|FJ.7.||J-L|FJFJFJLJL------JLJF7JF--7LJF-JF--7FJL-7|L---7L--7L----7||-J| -F7L7--JJLJLLF-JL7FLJLJF7||L-J|F--------7L|F-7L----7L--7F7|F7L7F-J.|-F7J-F.FJ|JL||7L7|7|.F7F7.F7F--J|FJF7|F-J7FJF-J|F--JL----JF7JL--7F-JJLLFL -|L7|.LJ-|L7LL--7|F-7F7||||F7JLJF-------JFJ|-|F7F--JF7.LJLJ|L7||JJF|F||.7.7|F7F-JL--JL7-FJLJL-J|L--7|L-J||L--7|FJ7FJL--------7|L7LF7LJJFJ.|.. -LJFJ7JF.LF-7F--J|L7LJLJLJLJL-7-L-------7L7L7LJLJ|F7||F--7FJFJ|L-7F7FJL-7F||L-L--7F7F7L7|F7F7F7L---JL-7FJL---J|L--JF7F7F----7LJFJ-||J|.L.F7FF -.-J.F7|F-L7LJF-7L7L7F7F---7F7L--------7||L7L7F7F7|||||F-J|FJ7|F7||||F--J-F77JLF-J|||L7LJ|||||L------7LJF-----JF-7FJ|||L---7L--J|-||-F7-|--J7 -.LFFL|7JJFJF-JFJFJ7||LJFF-J|L7F7F----7LJF7L-J|LJLJLJLJL7|||F7||LJ|||L-7F-JL-7.L7FJ||FL7FJLJLJF7JF---JF7|F-7F7FJ7|L7||L7F--JF7F-7FJL777|.F.L- -|FL|JFF.FL-JF-JFJF7LJF-7L--J7LJLJF---JF7|L-7L|F--------JFJLJLJ|F-JLJF-JL7F--JF7LJFJ|F7||F----JL7L7F-7|LJL7||LJF7L7||L7||F7FJ||FJ|F-J777F77.| -LJ7|FLJ-L-F-JF-JFJ|F7L7|JF7JF7F--JF7F7|LJF-JFJL--7F7F-7JL7F---JL---7L7F7||F77||J.L-J|LJ|L----7FJFJ||LJJF-JLJF-JL7LJL-JLJ||L7||L-J||F7J7||F-7 -LL-L7|F||.L--JF7L7|||7|L-JL-J|L---JLJLJF-JF7L7F--J||L7L7FJL7F-7F--7|FJ|LJLJL7|L-7F-7L--JF---7|L7L-JF-7FJF7F7|F-7|F7F7FF7|L7|LJF--JFJ|LL7L|-| -L|7|L77-77|.F-JL7|LJL7L-----7|F7F-----7|F7||FJL-7FJL7|FJL-7||FJL-7||L7L7F---J|F-JL7|F--7L--7LJFJF-7|FJL-JLJLJL7LJ|LJL7|||FJ|F-JF7FJFJ.L|---| -..|L-J|7FLJFL--7|L-7FJ|F7F--JLJ|L----7LJ|||LJF--JL7FJ|||F7||||F77||L7L-JL7F-7||F7J||L7FJF7FJF7L7L7||||F----7F7L7FJF-7LJLJL-JL--J||FJJF-7-L-J -FLL7LFJ--J.F7F-JL--JL77||L----7L--7F-JF-J||F7L7FF7||FJL7|||LJ|||FJL7|F---JL7LJLJL7||FJL-JLJFJL7L-JLJL7L--7-LJL7LJFJFJF7F-7F-----J|L7FJFJ7.LF -F|7.|F-|J|F||L-7F-7F7L-JL---7LL--7LJF7|F-J||L7L7|||LJF-J|||F-J||L-7LJL7F--7L-7F-7|||L------JF-JF7F7F7L--7L--7.L7FJJL7|LJLLJF7F--7|FJ|FJ|7.-J --J--7LF.FF7||F7||FJ|L--7F7F7L----JF7|LJL--JL7L7LJLJF-JF-JLJ|F7|L7-|F--J|F-JF-JL7LJ||F---7|F-JF7|||LJ|F-7L---JF7LJF7FLJ-F7F7|||F-J|L-JL-7---J -|-FLJ-FF-JLJ|||LJL-J-F-J||||F-----JLJF7F-7F7L7L---7L-7L---7||||FJFJL---JL7LL7F7L7FJ|L7F-JFJF7|||||F-J|LL-----JL--J|F7F-JLJ||||L7FJF7F--JJ7FJ -J-7|.|LL---7LJ|F77F--JF7|LJLJF7F7F7F7||L7||L-JFF-7|F7L7.F7|||LJL7L7F-7F--JF7||L7||FJFJ|F7L-J||LJLJL-7L7F----7F----J|LJF--7LJ||FJ|FJLJFF7.-7J -J..J.J-F7LFJF7LJL-JF-7|||F---JLJLJLJLJ|FJLJF7F7L7|LJL-JFJ|||L7F-JFJL7LJF7FJ|LJFJ|||LL7LJL7LFJ|F-----JFJL---7|L--7F7L-7|F7|F-J||L|L7.F-JL7FFJ -FFF7FLFJL-JFJ|F-7F7L7LJLJL-----7F7F7F7||F--JLJ|FJ|F7F-7L7|||FJL-7|F7L7FJ|L7L-7|FJ||F7L--7L7L-JL----7FJFF--7||F--J||F7|LJ|LJF-JL7|FJFJF--J-LF --7LJ7FL-7F7||LJL|||FJF----7JF7FJ|LJLJ||||F--7FJL7||LJFJFJLJ|L7F-J||L7||FJLL-7|||FJLJL-7-|FJF-7F7F7FJ|F-JF7LJ|L---JLJLJF-JF7L7F-J|L-JFJ.LJ.FJ -L|.LF-JLLJ||F7F-J||L7L---7L-J|L-JLF--JLJ||F7LJF7|LJF-J7L--7|FJ|F-JL7LJ||F7LFJLJ|L-7F--JFJL7L7||||||FJL--JL-7L-----7F-7L--JL-J|F-JF--JF-7F-J7 -F|7L-7..F7||||L7FJ|FJLF7-L7F7L---7L---7FJLJL-7|||F7L7-F7F-J||FJL7F-JF7|LJL7L--7|F7||F7FJF-JFJLJ|||||F7F7F--J-F7FF7LJ7L7F7F7F7LJF7|F7JFJL|FFJ -LJ.FJ-F-J|LJ|L-J|FJ|F-JL-7||L7F-7L----JL7F---J||||L7L7|||F7LJL7FJ|F-J|L-7FJF7FJ||LJ|||L7|F7L7F-J||LJ||||L-7F7|L-JL---7LJ||LJ|F7||LJL-7FL7FJJ -.-7|.|L-7L--JF-7|L7|L---7LJ|J|||L-----7FJL7F7FJLJL7L-J||LJ|F--JL7|L-7|F7|L7|||FJ|F-J||FJ|||FJ|F7|L7FJLJ|FFJ|||F-----7L-7|L-7|||||F7F-JFL|J7J -FLF77F--JF--7|FJ|FJ|F7F-JF7L7||F------JL7FJ||L7F7FJF7L||JFJL7F7FJL7L|||||FJ|LJ|||||FJ||FJ||L7||||FJL--7L7L-JLJL--7F7L--JL7FJ||LJLJ|L-7J.|||7 -F7|JF|F--JLFJ|L7|L7||LJF7|L7|LJL---7F-7FJL7|L7LJ|L7|L7|L7L-7|||L-7L7|||||L7L-7|FJL7|FJ|L7||FJ|||||F---JFJF----7F7LJL--7F7LJL|L-7|.L7FJFFL-JJ -LLJ..LJ-LLFJFJJLJ7LJ|F-JLJFJ|F-----J|FJL-7||FJF7|FJ|FJ|FJF7||||F7|FJ|||||FJF7||L7FJ||JL7||||FJ||||L---7|7L---7LJL--7F7LJL--7L-7L--7LJJF7--7J --JFF7JLF7LL-JJFFF---J|F---JFJL-----7|L7F-J|||FJ|||FJ|FJL7|||LJ||||L7||||||FJ||L7|L7||F7|||||L7|||L7F7FJ|F7F--JF7F-7||L7F---JF7L---J7|7J|7F|J -|||J|7|L7|7LJ.F7L7F-7||F7F7|F------J|FJL7FJ|||JLJ||-LJJFJ||L-7||||FJ||||||||LJ||L7||LJ||LJ|L7||||FJ|LJFJ||L---J||FJLJJLJF---JL---7F7F7-F--7. -|-L-L77FF-F|F-JL-J|7LJLJ||||L-----7FJL7FJL-J|L--7||F---JFJ|F-JLJLJ|FJ||LJ||F-7FJFJ||LFJ|.FJFJLJ||L7L-7|FJ|F----J||F7JF--JF7F-----J|||L7||LJ7 -||J||.LL-7|F|F7F7FJF7F7JLJLJF-----J|F-JL---7|F7FJ||L-7F-JFJL7|F-7FJL7|L-7||L7LJFJFJL7L7|FJFJF--JL7|F7|LJFJL----7|LJL-JF7FJ|L7F----JLJFJ-JF7| -F|-|-|LJ7F--LJLJLJF|LJL---7FJF-7F7FJL-7F--7|||LJFJ|F-J|F-JF7L7|FJL--J|F7|||7L-7|JL7FJFJ|L7|FL--7FJ|||L-7|F7F--7LJF7F7FJLJ7L7LJF-7F-7FJ|-7-77 -|LJ|LL-FL7LJJLL.F--JF-7F-7LJFJ.LJ|L7-FJL7FJ||L-7|FJL-7|L7FJL7LJL----7||LJLJF--JL-7LJJL-JF|L7F--JL7LJ|F7||||L-7|F7|LJLJ-F--7L--J||L7|L-7-J7LF -77.|-JF|--77F-.FL--7|FJ||L-7|F7F7L-JFJF7||FJ|F-JLJF--J|FLJF-JF7F7F7FJ||F-7LL-7F--JF7F7FF-JFJL7F7FJF-J|LJ||L7FJ|||L-----JF7L----7|FJL7FJ|.7.. -|77|-7-L-|7-|7F|LL7||L-JF--J||LJL---JFJ||||FJL---7L-7FJF-7L7FJLJ||LJFJ|L7L---JL---JLJL7L7FJF-J|||-L-7L-7||-||L|||F7F-7F-JL---7FJ|L-7LJ-7-L77 -|.F7-||L-L--JJ|.|L-LJF--JF--JL--7F7F-JFJ|||L7F--7|F-JL-JFJFJL-7FJL7JL7|FJF7F-7F-7F7F7FJFJL7L-7||L-7-|F-J||FJ|FJ|||||FJL-----7LJL|F-J-J.F7L|7 -|-JJFFJ7.|L7||-L|7-JLL---JF-----J|||F-JFJ||J|L7-LJL7F7F7L7L7F7||F7L-7|||FJ||FJL7||||LJ7L--JF7|||F7|FJL-7||L7||FJ|||||F7F-7F-JFF7LJJJ||FJF-77 -L||-|JJJ7LJ-J-J|L7-J7JF---JF-----J|||F7|FJL7L7|F7FFJ||||FJFJ|||LJ|F-JLJ||-LJL7FJ|||L---7F--JLJ|LJLJ|F-7|LJJ||LJ||||||||L7|L---JL-7J.|7||||LJ -FL7L|||F7F-.FJ-7J|FF7FL----JF--7-FJ|||LJL-7|7|LJL7|FJ||||JL7||L-7|L--7FJL-7F-J|FJ||F7F-JL-7F7FJF--7|L7||F7FJL--7|||||||FJ|F-7F7F-JJ.|J|7FJ.| -7F|LJ-L-7J.F7.|LF77J|F------JF7|FJFJ|L7F--JL7L---J||J||||F7|||F7||F--JL7F7|L-7|L-J|||L7F-7||||7L-7LJFJ|LJ||F7F7|LJ||||||FJL7|||L--7-|-J||LFJ -L7-77.|JLL-J.L|FL||7FL7F--7F7||LJFJ-L-JL-7F7L----7|L7|||LJ|||||S||L---7||LJFFJL-7||||FJL7LJ||L7F-JF7L7L7FJ|||||L-7|||||||F7|||L7F7L7|7F77.-. -|JL|-7L-7|FF-J||-FJ-|LLJ-FJ||||F7|F7F----J|L7F7F-J|FJLJL7FJLJ|||||F7F7|||F--JF-7|FJ||L-7L7FJ|FJL-7||FJ7|L7||LJ|F-JLJLJ||||LJ||.LJL-J-|7J|7.7 -J-.LL-JL7FJ-7.7JL|7FL-|JLL7|||LJ|LJ|L7F--7|FLJ|L-7|L--7-|L--7||LJ||||||LJ|F-7|FJ|L7|L7FJFJL7||F--J||L-7L7||L77|L-----7LJLJJL|L7JJL|JLJJ.L7-| -J7F7F-F--|JL-..FFL77-77|LFJ|LJF-JF7|FLJF-JL--7L--JL-7FJFJF7FJ||F-J||||L-7LJFJ||FJFJL7LJFJF7|||L--7|L7FJFJ||FJFJF7F-7FJF7J|LFJFJ|F-J--J.|F|-7 -F-L7JL|.|L7J|FF-J77LF.L-FL-J-FJF7|||F--JF-7F7L----7FJ|JL7|LJ7LJL7FJ|||F-JF7L7||L7L7FJF-JFJ|||L7F-JL7LJJ|FJ||J|FJ||FJL7||L|7L7L-7||F-7.LJF-.| -JL-JLFJ-7.JLF|7JFLJ7LF7-|JJF7|FJLJ||L7F7|FJ||F7F7FJL-JF-JL7J-LF-J|FJ||L7L|L-J|L7|J|L7L-7L7|||FJL7F7L--7|L7|L7||FJ|L-7LJL7FJ7L--JJ--.|-L.|J-| -F-J7.|JFL7.FL|.77L|JLL7.||J|LJL7F-JL7LJ||L7||||||L---7L7F7L-7|L-7|L-JL7L7L7F7L7|L7L-JF-JFJ||||FF||L7F7|L7||FJ||L7L-7|F--JJ.FJJ|L.|7.||LFJ|.| -|77LFF-.JJ7|FJ.L-.L7||LF-FFJF7FJ|F7FJ|FJ|FJ|||LJ|F7F7L7||L-7|-J||L-77F|FJ||||FJL7L--7L7FJFJ||L7FJ|-|||L7LJ|L7||FJF-JLJJLJF7-J-FJF|-7FJ.L7J-7 -LF|7.||.L-7.|F-.FJ-J-7.L.FJFJLJ.LJ||F-JFJ|FJLJF-J|LJL7|||JLLJ||-|F7|F-JL-7|||L7FJF-7||||.L7||FJ|FJFJ||FJF-JFJLJL7L-7J||FLLJ|J7|--L.LF7L7.|-J -F|.J7F7F7-F|7J-|7JJ.|.J-FJFJJL||.LLJ|F7|FJL-7FJF7||J.LJLJ.L|J7.LLJLJL--7FJ||L-J|FJL||FLJF-J|||FJL7L7|||LL-7L-7.FJF7|.FF-7L---LJFJ|.||J7LF7L| -FJ7F7|F-7FLJ77.7L7-7-7||L7|FLJ|L7JJ.LJLJL7F7||FJLJJ.LJLL7L.|.J77.L|F---J|||L-7FJL7F||JLLL--J|||F7L7LJ|L-7L|F7|FJFJLJ-|JLLJ.LFJ-|-L-F7|F|F-77 -.F-LJ|7LL7J.F--L7JLJ.JJ7LLJJF-7-77|.|JFF-J|LJLJLJJ-L7F7LFJFJ7.F-7FFL---7L7|F7|L7FJFLJJJ.|LLJLJ|||FJF-JF-J.LJLJL7|JJ7LL.F|F7F-7L77.LLJ-FF-7LJ -FJ|.|L-7LL.-JL7.F-7J.|J|--|F7-7-L-J7J|FL7FJJ|-JLJ-F.7-F.-F7|.F||FF-7F--JFJLJLJ-LJLF7|-FF--L-7LLJ|L7L-7L-7J..JJFJ|7LF7L-LJ-J|---J|.|.---.LLJ7 --7FF-FL7.|-||.L.||||7FFJ|7-FJ7J|7.|JFL7.LJ|L-F.---7LL7L||L|7.7|FJL7LJF-7|F77LJF||.L7|.L7.-7LL.LFJFJF-JF-J.FL--L-J--JL|.J7F777LL7J-J.LF.|.|.F -LJ7L7|-7L7-7-|J-F---77F7LJ|.|.|FL77F|--7.FL7JLJJFFL7L7LF7JL7-JF|-|L7FJFJLJ|7FLFJ|7.|F7JJ.FF7|F-L7|FL-7|7JF|-JFLJ7.|.FL-L-FJJL-.L|.FL-7-|F-|| -7|L--J.JF-7JF|JJ.|FJJFJ|7F-JJ-7|-J|FL-JLFF7|.FL-L-7F7|.-J.LFJFJ|LF7|L7L7F7|7JJ.FL|-|7J7JLJJF|L-FJ|77F|L7J-L-|-JF--|-|7L|||7.|F--FFF7|.F-|JL7 -L7F--77.|JF777-77-L7FJF-7-.LL|F-JL|7J-.F-JL|.L|-|.|FL7.|-L.|.J-7-F-JFJFJ|LJJFF7JJL7.|L|-|7-FJ7.L-J|LLL-J|LFLL7-L|||7|L7|7||7FJJL-LJ7--|.FJF7 --JL||LJ.F.|L-J7LJ7|LJ|||LJ..F7FJ7|L|J.7-|J|L7.|.J7.F|L7|-.F77JF|LL7FJLL7||-L-7LLJ7L77FJ|||-L--.LL|7J|||L|.7J.|FFLFJ-|F-J|||FFJ|7L.F|J-77J-|J -.J.L7L7F|7JLJ|J|LLFJ..|7FLJF7L|L-J77.FL7J-|LF7J.F-7LF-JJ77F|J.L.FFJ|J.LLJ7.|..FJ-F7JLJ7F-|J|7L-|-L-77-LJL-J.7L77LF-JJ|J|LJ7-L-7-LL-777LL7.|J -FLL7JL|LF-77.L.|7.L7.LF|7FJL|FLFL|J|-7----7.LJF-F.FL-7-LLL||7F|FLL-J--7JLJ-77F|.F77|F7--||7F7F77FL|JJ.|-|FL7.J.F7JFJ.|.L.|JLLJL7-J-LJ|7L77.| -|.FJ|-|F|||77L|7.FF--7L-JJ|FL|.J7|LLJ|-JJ.|FFF|-J77.L||-|JFJ-|-LJFJJ|.L7FLJ.||F7|LF-|J.LLJ-LJ7|FLF7J.-L7-7--7LFJ|FJ.F77L|L||L-|.-JLL7LL.|J7L -|-|-J.--LLLF|JJ.FFLJL-J-JJL--JF-L7-|J.F.LJ.L-J|L|77--J|-J.JL|.J.LJJL-JJLJJ.-J-J-7-7-LJL7L|-L-JJLLFJF--L|J--JFJF-7-LLJL--|---F.--|7J.L-L7JJ-. \ No newline at end of file diff --git a/input/day11.txt b/input/day11.txt deleted file mode 100644 index f93ca8f..0000000 --- a/input/day11.txt +++ /dev/null @@ -1,140 +0,0 @@ -.#..........#.....................#........................................................#....................................#........... -...................#........................................#......................#........................................................ -...........................................#......#..................#...................................................#.................. -....#......................#...............................................#.........................#.....#......#................#........ -.................................................................#.......................#.................................................. -..............................................................................................................................#............. -.......#........#.............#...................................................#...................................#..................... -.........................#...................................#............................................................................#. -....................#.............#.........#..........................................#...............#.................................... -.....................................................#...............#.............................................................#........ -...........................................................................................................................#................ -..........................................................#.........................................#...............#....................... -..............................................................................................#............................................. -.#........#........................#......#..............................................#..............................#...............#... -...............#......#...............................#.......#.........#......#.............................#.................#............ -...............................#..............#............................................................................................. -............................................................................................................................................ -.........................#.......................................#.......................................................................... -..................#........................#......................................#........................................#................ -..................................................#.......#..............................................#........................#.......#. -...#........#........................#....................................#...............#................................................. -............................................................................................................................................ -.......#........................#....................................................................................#...................... -...............#...........#........................................................................#....................................... -.............................................#................#.........#.............................................................#..... -...........#...........................#................#...........................#....................................................... -..................................................#.......................................#.............#................................... -.....#..................#..........#..............................#.............................#........................................#.. -..............................#...............................................................................................#............. -...................................................................................................................#........................ -..............#..........................................#.............#...........................#..............................#......... -...#...................................#.........................................#.......................................................... -..................#...................................................................#................................................#.... -..........................#...................................#.........................................#................................... -............................................................................................................................................ -.........#...........#..........#..........................................#....................#..............#........#.....#...........#. -....................................................#....................................................................................... -.............................................#.............................................................................................. -......................................#..................#..............................#...........#.......#............................... -............................#..................................#..............#............................................................. -...............#............................................................................................................................ -...........................................#............................#.......................#........................................... -.....#..............#.................................................................................#...........................#......... -............................................................................................................................................ -........................................#..........#.................#..........................................#........................... -.............................................#.................................#...........#................................................ -...............................#.......................#...........................................#.......#....................#........... -#........#.............#...............................................................................................#...................# -.....................................#........................#..........#.........#........................................................ -.................#............................................................................#............................................. -..........................#.......................................#.................................................#....................... -.....................................................#...................................#....................................#............. -..#......................................................................................................................................... -.............#.....#.......................#.............#....................................................#........................#.... -......#........................................................................................#............................................ -.................................#.................................#........................................................................ -.................................................................................#.......................#................................#. -#.....................................................#...................................................................#.....#........... -.........#..................................................#......................................#........................................ -..............................#.............#.................................................................#.......#..................... -........................#............................................................#......#................................#.............. -.............#.............................................................................................................................. -.....#........................................................#............#..........................#...........................#......... -...........................#......#.................................................................................#...................#... -.........#.....................................#...............................#............................................................ -..................#.......................................#.......#................................#........................................ -...............................#.....................#...................................#................................#................. -..............#..........................#.............................#............#.....................#.....................#.........#. -.................................................................................................................#.......................... -......#..................................................................................................................................... -...........#.............#.........#........................................................................................................ -...................................................................#..............#..................#...................................... -..................#...........................................................................................#............................. -........#.................................#..............#.................................................................#..........#..... -...#.....................................................................#..............#.......#........................................... -............................................................................................................................................ -............................................................................................................................................ -.................................#................#..........................................................#...............#.............# -..............#............................................................#................................................................ -......#.....................#..........................#........#.....#............#..............#......................................... -....................#..................................................................................#..................#................. -....................................#.........#........................................................................................#.... -..........................................................#..............#.................................................................. -................#...............................................................................................#.............#............. -............................................................................................................................................ -............................#...................#......#.............#..............................................#....................... -.............#...................................................................................#........................................#. -......................#..........................................................#.......#.................................................. -#...........................................................#............................................................................... -.........#.........................#.................#....................................................#.................#............... -............................................................................................................................................ -...................#.............................................#.....#.................................................................... -........................#.........................#.....................................................................................#... -.....#........................................................................................................................#............. -.......................................#...............................................................#.........#.......................... -............................#...........................#...........#......................#..............................#.......#......... -..#................................#...........#............................................................................................ -.................#..................................#...................#................................................................... -..........#.................................................#................................................#.............................. -.....................#...............................................................................#...................................... -..............#..................#..............................#.............#....................................#.........#........#..... -...#.............................................................................................#.......................................... -............................................#..........................................#.................................................... -.........#...............................................#..............................................................#................... -................#.........#................................................................................................................. -.....#..................................#............................#..............................#........#..................#..........# -...............................#............................................................................................................ -....................................................#........#.............................................................................. -........#..........................#.........#...............................................................................#.............. -....................................................................................................................#....................... -....................#........#......................................#.........#.....#.....#................................................. -................................................................................................................................#.....#..... -...............#..........................................#...............#...............................#................................. -...#..............................#......................................................................................................... -........................................................................................#............#....................................#. -............................................................................................................................#............... -...................................................................................#............................#........................... -#........#........#........#..........#.........#........................................................................................... -.............................................................#..............................#............................#.................. -................................#.......................#................................................................................... -.......................#................................................#...............#.........#..................#................#..... -............#..................................................................#........................#................................... -............................................................................................................................................ -......#.....................#.......#......#..............#......#.......................................................................... -.....................#...................................................................................................................... -................................#................................................#.............#...........................#.............#.. -..............................................................................................................#............................. -............#............#..........................................................................#.............................#......... -.....#...........#.....................#.............................#.....#........................................#....................... -................................................#...........#..........................#.................................................... -............................................................................................................................................ -#..........................#.....#................................................................#......................................#.. -..........................................#.................................................................#.............#................. -................#.........................................................#................................................................. -.......#..............................#..............................................#..........................................#........... -........................#...................................#............................................................................... -............................................................................................................................#............... -..............................#.....................#.............................#...........#.................#........................... -...............................................#................#.....#................................................#.................... -...................#...................#.................#.................#.........................#...................................... \ No newline at end of file diff --git a/lib/loader.ts b/lib/loader.ts new file mode 100644 index 0000000..615be9c --- /dev/null +++ b/lib/loader.ts @@ -0,0 +1,22 @@ +import * as fs from 'fs' +import * as path from 'path' + +export const loadString = (s: string): string[] => + s + .trim() + .split('\n') + .map((s) => s.trim()) + +export const loader = + (day: number) => + (file: string): string[] => + loadString( + fs.readFileSync( + path.resolve( + process.cwd(), + `day${day.toString().padStart(2, '0')}`, + `${file}.txt`, + ), + 'utf-8', + ), + ) diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..e841896 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,12055 @@ +{ + "name": "@coderbyheart/advent-of-code", + "version": "0.0.0-development", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@coderbyheart/advent-of-code", + "version": "0.0.0-development", + "hasInstallScript": true, + "license": "MIT", + "devDependencies": { + "@commitlint/cli": "15.0.0", + "@commitlint/config-angular": "15.0.0", + "@nordicsemiconductor/asset-tracker-cloud-code-style": "10.0.0", + "@types/jest": "27.0.3", + "@types/node": "17.0.4", + "eslint": "8.5.0", + "husky": "7.0.4", + "jest": "27.4.5", + "lint-staged": "12.1.4", + "prettier": "2.5.1", + "ts-jest": "27.1.2", + "typescript": "4.5.4" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=8.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", + "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.5.tgz", + "integrity": "sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", + "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", + "dev": true, + "dependencies": { + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.3", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.15.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", + "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.5.tgz", + "integrity": "sha512-/d4//lZ1Vqb4mZ5xTep3dDK888j7BGM/iKqBmndBaoYAFPlPKrGU608VVBz5JeyAb6YQDjRu1UKqj86UhwWVgw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", + "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.3", + "@babel/types": "^7.16.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.15.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@commitlint/cli": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-15.0.0.tgz", + "integrity": "sha512-Y5xmDCweytqzo4N4lOI2YRiuX35xTjcs8n5hUceBH8eyK0YbwtgWX50BJOH2XbkwEmII9blNhlBog6AdQsqicg==", + "dev": true, + "dependencies": { + "@commitlint/format": "^15.0.0", + "@commitlint/lint": "^15.0.0", + "@commitlint/load": "^15.0.0", + "@commitlint/read": "^15.0.0", + "@commitlint/types": "^15.0.0", + "lodash": "^4.17.19", + "resolve-from": "5.0.0", + "resolve-global": "1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/config-angular": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-angular/-/config-angular-15.0.0.tgz", + "integrity": "sha512-1gpyAZkGB+v9hTvw4G8AGU7vzq49/pANifShUsoyuSLAmHzxC3YgE+ZyqlVoB+T6gjE90NXjUQbLmNpi/7ZFYg==", + "dev": true, + "dependencies": { + "@commitlint/config-angular-type-enum": "^15.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/config-angular-type-enum": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-angular-type-enum/-/config-angular-type-enum-15.0.0.tgz", + "integrity": "sha512-KBGoII2yo76KtbKbeCym5PxCt5CZvti7YbCEGOF5GiyZd/9AaJur/UhbzX3pcoLMgXd9u3Ru+qydm79TlRLuJA==", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/ensure": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-15.0.0.tgz", + "integrity": "sha512-7DV4iNIald3vycwaWBNGk5FbonaNzOlU8nBe5m5AgU2dIeNKuXwLm+zzJzG27j0Ho56rgz//3F6RIvmsoxY9ZA==", + "dev": true, + "dependencies": { + "@commitlint/types": "^15.0.0", + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/execute-rule": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-15.0.0.tgz", + "integrity": "sha512-pyE4ApxjbWhb1TXz5vRiGwI2ssdMMgZbaaheZq1/7WC0xRnqnIhE1yUC1D2q20qPtvkZPstTYvMiRVtF+DvjUg==", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/format": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-15.0.0.tgz", + "integrity": "sha512-bPhAfqwRhPk92WiuY0ktEJNpRRHSCd+Eg1MdhGyL9Bl3U25E5zvuInA+dNctnzZiOBSH/37ZaD0eOKCpQE6acg==", + "dev": true, + "dependencies": { + "@commitlint/types": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/is-ignored": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-15.0.0.tgz", + "integrity": "sha512-edtnkf2QZ/7e/YCJDgn1WDw9wfF1WfOitW5YEoSOb4SxjJEb/oE87kxNPZ2j8mnDMuunspcMfGHeg6fRlwaEWg==", + "dev": true, + "dependencies": { + "@commitlint/types": "^15.0.0", + "semver": "7.3.5" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/lint": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-15.0.0.tgz", + "integrity": "sha512-hUi2+Im/2dJ5FBvWnodypTkg+5haCgsDzB0fyMApWLUA1IucYUAqRCQCW5em1Mhk9Crw1pd5YzFNikhIclkqCw==", + "dev": true, + "dependencies": { + "@commitlint/is-ignored": "^15.0.0", + "@commitlint/parse": "^15.0.0", + "@commitlint/rules": "^15.0.0", + "@commitlint/types": "^15.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/load": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-15.0.0.tgz", + "integrity": "sha512-Ak1YPeOhvxmY3ioe0o6m1yLGvUAYb4BdfGgShU8jiTCmU3Mnmms0Xh/kfQz8AybhezCC3AmVTyBLaBZxOHR8kg==", + "dev": true, + "dependencies": { + "@commitlint/execute-rule": "^15.0.0", + "@commitlint/resolve-extends": "^15.0.0", + "@commitlint/types": "^15.0.0", + "@endemolshinegroup/cosmiconfig-typescript-loader": "^3.0.2", + "chalk": "^4.0.0", + "cosmiconfig": "^7.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "typescript": "^4.4.3" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/message": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-15.0.0.tgz", + "integrity": "sha512-L8euabzboKavPuDJsdIYAY2wx97LbiGEYsckMo6NmV8pOun50c8hQx6ouXFSAx4pp+mX9yUGmMiVqfrk2LKDJQ==", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/parse": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-15.0.0.tgz", + "integrity": "sha512-7fweM67tZfBNS7zw1KTuuT5K2u9nGytUJqFqT/1Ln3Na9cBCsoAqR47mfsNOTlRCgGwakm4xiQ7BpS2gN0OGuw==", + "dev": true, + "dependencies": { + "@commitlint/types": "^15.0.0", + "conventional-changelog-angular": "^5.0.11", + "conventional-commits-parser": "^3.2.2" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/read": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-15.0.0.tgz", + "integrity": "sha512-5yI1o2HKZFVe7RTjL7IhuhHMKar/MDNY34vEHqqz9gMI7BK/rdP8uVb4Di1efl2V0UPnwID0nPKWESjQ8Ti0gw==", + "dev": true, + "dependencies": { + "@commitlint/top-level": "^15.0.0", + "@commitlint/types": "^15.0.0", + "fs-extra": "^10.0.0", + "git-raw-commits": "^2.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/resolve-extends": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-15.0.0.tgz", + "integrity": "sha512-7apfRJjgJsKja7lHsPfEFixKjA/fk/UeD3owkOw1174yYu4u8xBDLSeU3IinGPdMuF9m245eX8wo7vLUy+EBSg==", + "dev": true, + "dependencies": { + "import-fresh": "^3.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/rules": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-15.0.0.tgz", + "integrity": "sha512-SqXfp6QUlwBS+0IZm4FEA/NmmAwcFQIkG3B05BtemOVWXQdZ8j1vV6hDwvA9oMPCmUSrrGpHOtZK7HaHhng2yA==", + "dev": true, + "dependencies": { + "@commitlint/ensure": "^15.0.0", + "@commitlint/message": "^15.0.0", + "@commitlint/to-lines": "^15.0.0", + "@commitlint/types": "^15.0.0", + "execa": "^5.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/to-lines": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-15.0.0.tgz", + "integrity": "sha512-mY3MNA9ujPqVpiJjTYG9MDsYCobue5PJFO0MfcIzS1mCVvngH8ZFTPAh1fT5t+t1h876boS88+9WgqjRvbYItw==", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/top-level": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-15.0.0.tgz", + "integrity": "sha512-7Gz3t7xcuuUw1d1Nou6YLaztzp2Em+qZ6YdCzrqYc+aquca3Vt0O696nuiBDU/oE+tls4Hx2CNpAbWhTgEwB5A==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/types": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-15.0.0.tgz", + "integrity": "sha512-OMSLX+QJnyNoTwws54ULv9sOvuw9GdVezln76oyUd4YbMMJyaav62aSXDuCdWyL2sm9hTkSzyEi52PNaIj/vqw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@endemolshinegroup/cosmiconfig-typescript-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz", + "integrity": "sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==", + "dev": true, + "dependencies": { + "lodash.get": "^4", + "make-error": "^1", + "ts-node": "^9", + "tslib": "^2" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "cosmiconfig": ">=6" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.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.9.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", + "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "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/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.2.tgz", + "integrity": "sha512-xknHThRsPB/To1FUbi6pCe43y58qFC03zfb6R7fDb/FfC7k2R3i1l+izRBJf8DI46KhYGRaF14Eo9A3qbBoixg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.4.2", + "jest-util": "^27.4.2", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.5.tgz", + "integrity": "sha512-3tm/Pevmi8bDsgvo73nX8p/WPng6KWlCyScW10FPEoN1HU4pwI83tJ3TsFvi1FfzsjwUlMNEPowgb/rPau/LTQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.4.2", + "@jest/reporters": "^27.4.5", + "@jest/test-result": "^27.4.2", + "@jest/transform": "^27.4.5", + "@jest/types": "^27.4.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^27.4.2", + "jest-config": "^27.4.5", + "jest-haste-map": "^27.4.5", + "jest-message-util": "^27.4.2", + "jest-regex-util": "^27.4.0", + "jest-resolve": "^27.4.5", + "jest-resolve-dependencies": "^27.4.5", + "jest-runner": "^27.4.5", + "jest-runtime": "^27.4.5", + "jest-snapshot": "^27.4.5", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.2", + "jest-watcher": "^27.4.2", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "27.4.4", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.4.tgz", + "integrity": "sha512-q+niMx7cJgt/t/b6dzLOh4W8Ef/8VyKG7hxASK39jakijJzbFBGpptx3RXz13FFV7OishQ9lTbv+dQ5K3EhfDQ==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^27.4.2", + "@jest/types": "^27.4.2", + "@types/node": "*", + "jest-mock": "^27.4.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.2.tgz", + "integrity": "sha512-f/Xpzn5YQk5adtqBgvw1V6bF8Nx3hY0OIRRpCvWcfPl0EAjdqWPdhH3t/3XpiWZqtjIEHDyMKP9ajpva1l4Zmg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.4.2", + "jest-mock": "^27.4.2", + "jest-util": "^27.4.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.4.4", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.4.tgz", + "integrity": "sha512-bqpqQhW30BOreXM8bA8t8JbOQzsq/WnPTnBl+It3UxAD9J8yxEAaBEylHx1dtBapAr/UBk8GidXbzmqnee8tYQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.4.4", + "@jest/types": "^27.4.2", + "expect": "^27.4.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.5.tgz", + "integrity": "sha512-3orsG4vi8zXuBqEoy2LbnC1kuvkg1KQUgqNxmxpQgIOQEPeV0onvZu+qDQnEoX8qTQErtqn/xzcnbpeTuOLSiA==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.4.2", + "@jest/test-result": "^27.4.2", + "@jest/transform": "^27.4.5", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^27.4.5", + "jest-resolve": "^27.4.5", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.5", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/source-map": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.4.0.tgz", + "integrity": "sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.2.tgz", + "integrity": "sha512-kr+bCrra9jfTgxHXHa2UwoQjxvQk3Am6QbpAiJ5x/50LW8llOYrxILkqY0lZRW/hu8FXesnudbql263+EW9iNA==", + "dev": true, + "dependencies": { + "@jest/console": "^27.4.2", + "@jest/types": "^27.4.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.5.tgz", + "integrity": "sha512-n5woIn/1v+FT+9hniymHPARA9upYUmfi5Pw9ewVwXCDlK4F5/Gkees9v8vdjGdAIJ2MPHLHodiajLpZZanWzEQ==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.4.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.5", + "jest-runtime": "^27.4.5" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.5.tgz", + "integrity": "sha512-PuMet2UlZtlGzwc6L+aZmR3I7CEBpqadO03pU40l2RNY2fFJ191b9/ITB44LNOhVtsyykx0OZvj0PCyuLm7Eew==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.4.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.5", + "jest-regex-util": "^27.4.0", + "jest-util": "^27.4.2", + "micromatch": "^4.0.4", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@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/@nordicsemiconductor/asset-tracker-cloud-code-style": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@nordicsemiconductor/asset-tracker-cloud-code-style/-/asset-tracker-cloud-code-style-10.0.0.tgz", + "integrity": "sha512-t9/Ltx8D48+Dx5SbEKMWTX8fogEHutAq41otBTzXZFjAb0IANw35e68fi886a7i4lpTMkF7KjSXIJb73oUQNMA==", + "dev": true, + "dependencies": { + "@commitlint/cli": "15.0.0", + "@commitlint/config-angular": "15.0.0", + "@nordicsemiconductor/eslint-config-asset-tracker-cloud-typescript": "8.1.20", + "eslint": "8.5.0", + "husky": "7.0.4", + "lint-staged": "12.1.3", + "pinst": "2.1.6", + "prettier": "2.5.1", + "prettier-plugin-organize-imports": "2.3.4", + "typescript": "4.5.4" + }, + "engines": { + "node": ">=14", + "npm": ">=7" + } + }, + "node_modules/@nordicsemiconductor/asset-tracker-cloud-code-style/node_modules/lint-staged": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.1.3.tgz", + "integrity": "sha512-ajapdkaFxx+MVhvq6xQRg9zCnCLz49iQLJZP7+w8XaA3U4B35Z9xJJGq9vxmWo73QTvJLG+N2NxhjWiSexbAWQ==", + "dev": true, + "dependencies": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.16", + "commander": "^8.3.0", + "debug": "^4.3.3", + "execa": "^5.1.1", + "lilconfig": "2.0.4", + "listr2": "^3.13.5", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", + "object-inspect": "^1.11.1", + "string-argv": "^0.3.1", + "supports-color": "^9.2.1", + "yaml": "^1.10.2" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/@nordicsemiconductor/asset-tracker-cloud-code-style/node_modules/supports-color": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.1.tgz", + "integrity": "sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@nordicsemiconductor/eslint-config-asset-tracker-cloud-typescript": { + "version": "8.1.20", + "resolved": "https://registry.npmjs.org/@nordicsemiconductor/eslint-config-asset-tracker-cloud-typescript/-/eslint-config-asset-tracker-cloud-typescript-8.1.20.tgz", + "integrity": "sha512-bdi5w17wx5eAetgzfqEpuWnoOCry9a6psu5dQrFijUt599b/HN5chCHbsaODXUIdnoohMQk2izmO+ZfIWsl1EA==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "5.8.0", + "eslint-config-prettier": "8.3.0" + }, + "engines": { + "node": ">=14", + "npm": ">=7" + } + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/babel__core": { + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", + "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.3.tgz", + "integrity": "sha512-cmmwv9t7gBYt7hNKH5Spu7Kuu/DotGa+Ff+JGRKZ4db5eh8PnKS4LuebJ3YLUoyOyIHraTGyULn23YtEAm0VSg==", + "dev": true, + "dependencies": { + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.4.tgz", + "integrity": "sha512-6xwbrW4JJiJLgF+zNypN5wr2ykM9/jHcL7rQ8fZe2vuftggjzZeRSM4OwRc6Xk8qWjwJ99qVHo/JgOGmomWRog==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/prettier": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.2.tgz", + "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.8.0.tgz", + "integrity": "sha512-spu1UW7QuBn0nJ6+psnfCc3iVoQAifjKORgBngKOmC8U/1tbe2YJMzYQqDGYB4JCss7L8+RM2kKLb1B1Aw9BNA==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "5.8.0", + "@typescript-eslint/scope-manager": "5.8.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "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/experimental-utils": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.8.0.tgz", + "integrity": "sha512-KN5FvNH71bhZ8fKtL+lhW7bjm7cxs1nt+hrDZWIqb6ViCffQcWyLunGrgvISgkRojIDcXIsH+xlFfI4RCDA0xA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.8.0", + "@typescript-eslint/types": "5.8.0", + "@typescript-eslint/typescript-estree": "5.8.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "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/parser": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.8.0.tgz", + "integrity": "sha512-Gleacp/ZhRtJRYs5/T8KQR3pAQjQI89Dn/k+OzyCKOsLiZH2/Vh60cFBTnFsHNI6WAD+lNUo/xGZ4NeA5u0Ipw==", + "dev": true, + "peer": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.8.0", + "@typescript-eslint/types": "5.8.0", + "@typescript-eslint/typescript-estree": "5.8.0", + "debug": "^4.3.2" + }, + "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.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.8.0.tgz", + "integrity": "sha512-x82CYJsLOjPCDuFFEbS6e7K1QEWj7u5Wk1alw8A+gnJiYwNnDJk0ib6PCegbaPMjrfBvFKa7SxE3EOnnIQz2Gg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.8.0", + "@typescript-eslint/visitor-keys": "5.8.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/types": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.8.0.tgz", + "integrity": "sha512-LdCYOqeqZWqCMOmwFnum6YfW9F3nKuxJiR84CdIRN5nfHJ7gyvGpXWqL/AaW0k3Po0+wm93ARAsOdzlZDPCcXg==", + "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.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.8.0.tgz", + "integrity": "sha512-srfeZ3URdEcUsSLbkOFqS7WoxOqn8JNil2NSLO9O+I2/Uyc85+UlfpEvQHIpj5dVts7KKOZnftoJD/Fdv0L7nQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.8.0", + "@typescript-eslint/visitor-keys": "5.8.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "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/visitor-keys": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.8.0.tgz", + "integrity": "sha512-+HDIGOEMnqbxdAHegxvnOqESUH6RWFRR2b8qxP1W9CZnnYh4Usz6MBL+2KMAgPk/P0o9c1HqnYtwzVH6GTIqug==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.8.0", + "eslint-visitor-keys": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/babel-jest": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.5.tgz", + "integrity": "sha512-3uuUTjXbgtODmSv/DXO9nZfD52IyC2OYTFaXGRzL0kpykzroaquCrD5+lZNafTvZlnNqZHt5pb0M08qVBZnsnA==", + "dev": true, + "dependencies": { + "@jest/transform": "^27.4.5", + "@jest/types": "^27.4.2", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^27.4.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz", + "integrity": "sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz", + "integrity": "sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^27.4.0", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", + "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001280", + "electron-to-chromium": "^1.3.896", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/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/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001283", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz", + "integrity": "sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "dev": true + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/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/cli-truncate/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.0.1.tgz", + "integrity": "sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g==", + "dev": true, + "dependencies": { + "emoji-regex": "^9.2.2", + "is-fullwidth-code-point": "^4.0.0", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "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==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-commits-parser": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz", + "integrity": "sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw==", + "dev": true, + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": 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/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz", + "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.5.tgz", + "integrity": "sha512-YKaB+t8ul5crdh6OeqT2qXdxJGI0fAYb6/X8pDIyye+c3a7ndOCk5gVeKX+ABwivCGNS56vOAif3TN0qJMpEHw==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "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/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.5.0.tgz", + "integrity": "sha512-tVGSkgNbOfiHyVte8bCM8OmX+xG9PzVG/B4UCF60zx7j61WIVY/AqJECDgpLD4DbbESD0e174gOg3ZlrX15GDg==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.2.0", + "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": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "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.2.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/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-visitor-keys": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/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": "9.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.2.0.tgz", + "integrity": "sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==", + "dev": true, + "dependencies": { + "acorn": "^8.6.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.2.tgz", + "integrity": "sha512-BjAXIDC6ZOW+WBFNg96J22D27Nq5ohn+oGcuP2rtOtcjuxNoV9McpQ60PcQWhdFOSBIQdR72e+4HdnbZTFSTyg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "ansi-styles": "^5.0.0", + "jest-get-type": "^27.4.0", + "jest-matcher-utils": "^27.4.2", + "jest-message-util": "^27.4.2", + "jest-regex-util": "^27.4.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expect/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "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" + } + }, + "node_modules/fast-glob/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/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "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/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/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.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.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "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/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/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/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": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-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/git-raw-commits": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", + "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", + "dev": true, + "dependencies": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "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/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "dependencies": { + "ini": "^1.3.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/husky": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", + "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/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/import-local": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", + "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "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": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "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-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "dev": true, + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.1.tgz", + "integrity": "sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.5.tgz", + "integrity": "sha512-uT5MiVN3Jppt314kidCk47MYIRilJjA/l2mxwiuzzxGUeJIvA8/pDaJOAX5KWvjAo7SCydcW0/4WEtgbLMiJkg==", + "dev": true, + "dependencies": { + "@jest/core": "^27.4.5", + "import-local": "^3.0.2", + "jest-cli": "^27.4.5" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz", + "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.5.tgz", + "integrity": "sha512-eTNWa9wsvBwPykhMMShheafbwyakcdHZaEYh5iRrQ0PFJxkDP/e3U/FvzGuKWu2WpwUA3C3hPlfpuzvOdTVqnw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.4.4", + "@jest/test-result": "^27.4.2", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.4.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.4.2", + "jest-matcher-utils": "^27.4.2", + "jest-message-util": "^27.4.2", + "jest-runtime": "^27.4.5", + "jest-snapshot": "^27.4.5", + "jest-util": "^27.4.2", + "pretty-format": "^27.4.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.5.tgz", + "integrity": "sha512-hrky3DSgE0u7sQxaCL7bdebEPHx5QzYmrGuUjaPLmPE8jx5adtvGuOlRspvMoVLTTDOHRnZDoRLYJuA+VCI7Hg==", + "dev": true, + "dependencies": { + "@jest/core": "^27.4.5", + "@jest/test-result": "^27.4.2", + "@jest/types": "^27.4.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "jest-config": "^27.4.5", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.2", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-config": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.5.tgz", + "integrity": "sha512-t+STVJtPt+fpqQ8GBw850NtSQbnDOw/UzdPfzDaHQ48/AylQlW7LHj3dH+ndxhC1UxJ0Q3qkq7IH+nM1skwTwA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^27.4.5", + "@jest/types": "^27.4.2", + "babel-jest": "^27.4.5", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-circus": "^27.4.5", + "jest-environment-jsdom": "^27.4.4", + "jest-environment-node": "^27.4.4", + "jest-get-type": "^27.4.0", + "jest-jasmine2": "^27.4.5", + "jest-regex-util": "^27.4.0", + "jest-resolve": "^27.4.5", + "jest-runner": "^27.4.5", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.2", + "micromatch": "^4.0.4", + "pretty-format": "^27.4.2", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.2.tgz", + "integrity": "sha512-ujc9ToyUZDh9KcqvQDkk/gkbf6zSaeEg9AiBxtttXW59H/AcqEYp1ciXAtJp+jXWva5nAf/ePtSsgWwE5mqp4Q==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.4.0", + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.4.0.tgz", + "integrity": "sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.2.tgz", + "integrity": "sha512-53V2MNyW28CTruB3lXaHNk6PkiIFuzdOC9gR3C6j8YE/ACfrPnz+slB0s17AgU1TtxNzLuHyvNlLJ+8QYw9nBg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "chalk": "^4.0.0", + "jest-get-type": "^27.4.0", + "jest-util": "^27.4.2", + "pretty-format": "^27.4.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.4.4", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.4.tgz", + "integrity": "sha512-cYR3ndNfHBqQgFvS1RL7dNqSvD//K56j/q1s2ygNHcfTCAp12zfIromO1w3COmXrxS8hWAh7+CmZmGCIoqGcGA==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.4.4", + "@jest/fake-timers": "^27.4.2", + "@jest/types": "^27.4.2", + "@types/node": "*", + "jest-mock": "^27.4.2", + "jest-util": "^27.4.2", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.4.4", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.4.tgz", + "integrity": "sha512-D+v3lbJ2GjQTQR23TK0kY3vFVmSeea05giInI41HHOaJnAwOnmUHTZgUaZL+VxUB43pIzoa7PMwWtCVlIUoVoA==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.4.4", + "@jest/fake-timers": "^27.4.2", + "@jest/types": "^27.4.2", + "@types/node": "*", + "jest-mock": "^27.4.2", + "jest-util": "^27.4.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", + "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.5.tgz", + "integrity": "sha512-oJm1b5qhhPs78K24EDGifWS0dELYxnoBiDhatT/FThgB9yxqUm5F6li3Pv+Q+apMBmmPNzOBnZ7ZxWMB1Leq1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^27.4.0", + "jest-serializer": "^27.4.0", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.5", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.5.tgz", + "integrity": "sha512-oUnvwhJDj2LhOiUB1kdnJjkx8C5PwgUZQb9urF77mELH9DGR4e2GqpWQKBOYXWs5+uTN9BGDqRz3Aeg5Wts7aw==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^27.4.4", + "@jest/source-map": "^27.4.0", + "@jest/test-result": "^27.4.2", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.4.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.4.2", + "jest-matcher-utils": "^27.4.2", + "jest-message-util": "^27.4.2", + "jest-runtime": "^27.4.5", + "jest-snapshot": "^27.4.5", + "jest-util": "^27.4.2", + "pretty-format": "^27.4.2", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.2.tgz", + "integrity": "sha512-ml0KvFYZllzPBJWDei3mDzUhyp/M4ubKebX++fPaudpe8OsxUE+m+P6ciVLboQsrzOCWDjE20/eXew9QMx/VGw==", + "dev": true, + "dependencies": { + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.2.tgz", + "integrity": "sha512-jyP28er3RRtMv+fmYC/PKG8wvAmfGcSNproVTW2Y0P/OY7/hWUOmsPfxN1jOhM+0u2xU984u2yEagGivz9OBGQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.4.2", + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.2.tgz", + "integrity": "sha512-OMRqRNd9E0DkBLZpFtZkAGYOXl6ZpoMtQJWTAREJKDOFa0M6ptB7L67tp+cszMBkvSgKOhNtQp2Vbcz3ZZKo/w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.4.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "pretty-format": "^27.4.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.2.tgz", + "integrity": "sha512-PDDPuyhoukk20JrQKeofK12hqtSka7mWH0QQuxSNgrdiPsrnYYLS6wbzu/HDlxZRzji5ylLRULeuI/vmZZDrYA==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", + "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.5.tgz", + "integrity": "sha512-xU3z1BuOz/hUhVUL+918KqUgK+skqOuUsAi7A+iwoUldK6/+PW+utK8l8cxIWT9AW7IAhGNXjSAh1UYmjULZZw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.5", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.2", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.5.tgz", + "integrity": "sha512-elEVvkvRK51y037NshtEkEnukMBWvlPzZHiL847OrIljJ8yIsujD2GXRPqDXC4rEVKbcdsy7W0FxoZb4WmEs7w==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "jest-regex-util": "^27.4.0", + "jest-snapshot": "^27.4.5" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.5.tgz", + "integrity": "sha512-/irauncTfmY1WkTaRQGRWcyQLzK1g98GYG/8QvIPviHgO1Fqz1JYeEIsSfF+9mc/UTA6S+IIHFgKyvUrtiBIZg==", + "dev": true, + "dependencies": { + "@jest/console": "^27.4.2", + "@jest/environment": "^27.4.4", + "@jest/test-result": "^27.4.2", + "@jest/transform": "^27.4.5", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-docblock": "^27.4.0", + "jest-environment-jsdom": "^27.4.4", + "jest-environment-node": "^27.4.4", + "jest-haste-map": "^27.4.5", + "jest-leak-detector": "^27.4.2", + "jest-message-util": "^27.4.2", + "jest-resolve": "^27.4.5", + "jest-runtime": "^27.4.5", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.5", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.5.tgz", + "integrity": "sha512-CIYqwuJQXHQtPd/idgrx4zgJ6iCb6uBjQq1RSAGQrw2S8XifDmoM1Ot8NRd80ooAm+ZNdHVwsktIMGlA1F1FAQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.4.2", + "@jest/environment": "^27.4.4", + "@jest/globals": "^27.4.4", + "@jest/source-map": "^27.4.0", + "@jest/test-result": "^27.4.2", + "@jest/transform": "^27.4.5", + "@jest/types": "^27.4.2", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.5", + "jest-message-util": "^27.4.2", + "jest-mock": "^27.4.2", + "jest-regex-util": "^27.4.0", + "jest-resolve": "^27.4.5", + "jest-snapshot": "^27.4.5", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^16.2.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-serializer": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", + "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.5.tgz", + "integrity": "sha512-eCi/iM1YJFrJWiT9de4+RpWWWBqsHiYxFG9V9o/n0WXs6GpW4lUt4FAHAgFPTLPqCUVzrMQmSmTZSgQzwqR7IQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/parser": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.4.5", + "@jest/types": "^27.4.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.4.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^27.4.2", + "jest-get-type": "^27.4.0", + "jest-haste-map": "^27.4.5", + "jest-matcher-utils": "^27.4.2", + "jest-message-util": "^27.4.2", + "jest-resolve": "^27.4.5", + "jest-util": "^27.4.2", + "natural-compare": "^1.4.0", + "pretty-format": "^27.4.2", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.4", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.2.tgz", + "integrity": "sha512-hWYsSUej+Fs8ZhOm5vhWzwSLmVaPAxRy+Mr+z5MzeaHm9AxUpXdoVMEW4R86y5gOobVfBsMFLk4Rb+QkiEpx1A==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.4.0", + "leven": "^3.1.0", + "pretty-format": "^27.4.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.2.tgz", + "integrity": "sha512-NJvMVyyBeXfDezhWzUOCOYZrUmkSCiatpjpm+nFUid74OZEHk6aMLrZAukIiFDwdbqp6mTM6Ui1w4oc+8EobQg==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.4.2", + "@jest/types": "^27.4.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.4.2", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-worker": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz", + "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", + "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lint-staged": { + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.1.4.tgz", + "integrity": "sha512-RgDz9nsFsE0/5eL9Vat0AvCuk0+j5mEuzBIVfrRH5FRtt5wibYe8zTjZs2nuqLFrLAGQGYnj8+HJxolcj08i/A==", + "dev": true, + "dependencies": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.16", + "commander": "^8.3.0", + "debug": "^4.3.3", + "execa": "^5.1.1", + "lilconfig": "2.0.4", + "listr2": "^3.13.5", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", + "object-inspect": "^1.11.1", + "string-argv": "^0.3.1", + "supports-color": "^9.2.1", + "yaml": "^1.10.2" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/supports-color": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.1.tgz", + "integrity": "sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/listr2": { + "version": "3.13.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.13.5.tgz", + "integrity": "sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.4.0", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/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/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node_modules/node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "node_modules/object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true, + "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": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-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/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinst": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/pinst/-/pinst-2.1.6.tgz", + "integrity": "sha512-B4dYmf6nEXg1NpDSB+orYWvKa5Kfmz5KzWC29U59dpVM4S/+xp0ak/JMEsw04UQTNNKps7klu0BUalr343Gt9g==", + "dev": true, + "dependencies": { + "fromentries": "^1.3.2" + }, + "bin": { + "pinst": "bin.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "dependencies": { + "node-modules-regexp": "^1.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/prettier-plugin-organize-imports": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-2.3.4.tgz", + "integrity": "sha512-R8o23sf5iVL/U71h9SFUdhdOEPsi3nm42FD/oDYIZ2PQa4TNWWuWecxln6jlIQzpZTDMUeO1NicJP6lLn2TtRw==", + "dev": true, + "peerDependencies": { + "prettier": ">=2.0", + "typescript": ">=2.9" + } + }, + "node_modules/pretty-format": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.2.tgz", + "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.4.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/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/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "dev": true, + "dependencies": { + "global-dirs": "^0.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "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/rxjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", + "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", + "dev": true, + "dependencies": { + "tslib": "~2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", + "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/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-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-jest": { + "version": "27.1.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.2.tgz", + "integrity": "sha512-eSOiJOWq6Hhs6Khzk5wKC5sgWIXgXqOCiIl1+3lfnearu58Hj4QpE5tUhQcA3xtZrELbcvAGCsd6HB8OsaVaTA==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@types/jest": "^27.0.0", + "babel-jest": ">=27.0.0 <28", + "esbuild": "~0.14.0", + "jest": "^27.0.0", + "typescript": ">=3.8 <5.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "dependencies": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, + "node_modules/tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "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/v8-to-istanbul": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", + "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", + "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "17.2.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", + "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.0" + } + }, + "@babel/compat-data": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "dev": true + }, + "@babel/core": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", + "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.5.tgz", + "integrity": "sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ==", + "dev": true + }, + "@babel/helper-replace-supers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true + }, + "@babel/helpers": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", + "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", + "dev": true, + "requires": { + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.3", + "@babel/types": "^7.16.0" + } + }, + "@babel/highlight": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", + "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.5.tgz", + "integrity": "sha512-/d4//lZ1Vqb4mZ5xTep3dDK888j7BGM/iKqBmndBaoYAFPlPKrGU608VVBz5JeyAb6YQDjRu1UKqj86UhwWVgw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.5" + } + }, + "@babel/template": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/traverse": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", + "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.3", + "@babel/types": "^7.16.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@commitlint/cli": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-15.0.0.tgz", + "integrity": "sha512-Y5xmDCweytqzo4N4lOI2YRiuX35xTjcs8n5hUceBH8eyK0YbwtgWX50BJOH2XbkwEmII9blNhlBog6AdQsqicg==", + "dev": true, + "requires": { + "@commitlint/format": "^15.0.0", + "@commitlint/lint": "^15.0.0", + "@commitlint/load": "^15.0.0", + "@commitlint/read": "^15.0.0", + "@commitlint/types": "^15.0.0", + "lodash": "^4.17.19", + "resolve-from": "5.0.0", + "resolve-global": "1.0.0", + "yargs": "^17.0.0" + } + }, + "@commitlint/config-angular": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-angular/-/config-angular-15.0.0.tgz", + "integrity": "sha512-1gpyAZkGB+v9hTvw4G8AGU7vzq49/pANifShUsoyuSLAmHzxC3YgE+ZyqlVoB+T6gjE90NXjUQbLmNpi/7ZFYg==", + "dev": true, + "requires": { + "@commitlint/config-angular-type-enum": "^15.0.0" + } + }, + "@commitlint/config-angular-type-enum": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-angular-type-enum/-/config-angular-type-enum-15.0.0.tgz", + "integrity": "sha512-KBGoII2yo76KtbKbeCym5PxCt5CZvti7YbCEGOF5GiyZd/9AaJur/UhbzX3pcoLMgXd9u3Ru+qydm79TlRLuJA==", + "dev": true + }, + "@commitlint/ensure": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-15.0.0.tgz", + "integrity": "sha512-7DV4iNIald3vycwaWBNGk5FbonaNzOlU8nBe5m5AgU2dIeNKuXwLm+zzJzG27j0Ho56rgz//3F6RIvmsoxY9ZA==", + "dev": true, + "requires": { + "@commitlint/types": "^15.0.0", + "lodash": "^4.17.19" + } + }, + "@commitlint/execute-rule": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-15.0.0.tgz", + "integrity": "sha512-pyE4ApxjbWhb1TXz5vRiGwI2ssdMMgZbaaheZq1/7WC0xRnqnIhE1yUC1D2q20qPtvkZPstTYvMiRVtF+DvjUg==", + "dev": true + }, + "@commitlint/format": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-15.0.0.tgz", + "integrity": "sha512-bPhAfqwRhPk92WiuY0ktEJNpRRHSCd+Eg1MdhGyL9Bl3U25E5zvuInA+dNctnzZiOBSH/37ZaD0eOKCpQE6acg==", + "dev": true, + "requires": { + "@commitlint/types": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@commitlint/is-ignored": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-15.0.0.tgz", + "integrity": "sha512-edtnkf2QZ/7e/YCJDgn1WDw9wfF1WfOitW5YEoSOb4SxjJEb/oE87kxNPZ2j8mnDMuunspcMfGHeg6fRlwaEWg==", + "dev": true, + "requires": { + "@commitlint/types": "^15.0.0", + "semver": "7.3.5" + } + }, + "@commitlint/lint": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-15.0.0.tgz", + "integrity": "sha512-hUi2+Im/2dJ5FBvWnodypTkg+5haCgsDzB0fyMApWLUA1IucYUAqRCQCW5em1Mhk9Crw1pd5YzFNikhIclkqCw==", + "dev": true, + "requires": { + "@commitlint/is-ignored": "^15.0.0", + "@commitlint/parse": "^15.0.0", + "@commitlint/rules": "^15.0.0", + "@commitlint/types": "^15.0.0" + } + }, + "@commitlint/load": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-15.0.0.tgz", + "integrity": "sha512-Ak1YPeOhvxmY3ioe0o6m1yLGvUAYb4BdfGgShU8jiTCmU3Mnmms0Xh/kfQz8AybhezCC3AmVTyBLaBZxOHR8kg==", + "dev": true, + "requires": { + "@commitlint/execute-rule": "^15.0.0", + "@commitlint/resolve-extends": "^15.0.0", + "@commitlint/types": "^15.0.0", + "@endemolshinegroup/cosmiconfig-typescript-loader": "^3.0.2", + "chalk": "^4.0.0", + "cosmiconfig": "^7.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "typescript": "^4.4.3" + } + }, + "@commitlint/message": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-15.0.0.tgz", + "integrity": "sha512-L8euabzboKavPuDJsdIYAY2wx97LbiGEYsckMo6NmV8pOun50c8hQx6ouXFSAx4pp+mX9yUGmMiVqfrk2LKDJQ==", + "dev": true + }, + "@commitlint/parse": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-15.0.0.tgz", + "integrity": "sha512-7fweM67tZfBNS7zw1KTuuT5K2u9nGytUJqFqT/1Ln3Na9cBCsoAqR47mfsNOTlRCgGwakm4xiQ7BpS2gN0OGuw==", + "dev": true, + "requires": { + "@commitlint/types": "^15.0.0", + "conventional-changelog-angular": "^5.0.11", + "conventional-commits-parser": "^3.2.2" + } + }, + "@commitlint/read": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-15.0.0.tgz", + "integrity": "sha512-5yI1o2HKZFVe7RTjL7IhuhHMKar/MDNY34vEHqqz9gMI7BK/rdP8uVb4Di1efl2V0UPnwID0nPKWESjQ8Ti0gw==", + "dev": true, + "requires": { + "@commitlint/top-level": "^15.0.0", + "@commitlint/types": "^15.0.0", + "fs-extra": "^10.0.0", + "git-raw-commits": "^2.0.0" + } + }, + "@commitlint/resolve-extends": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-15.0.0.tgz", + "integrity": "sha512-7apfRJjgJsKja7lHsPfEFixKjA/fk/UeD3owkOw1174yYu4u8xBDLSeU3IinGPdMuF9m245eX8wo7vLUy+EBSg==", + "dev": true, + "requires": { + "import-fresh": "^3.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + } + }, + "@commitlint/rules": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-15.0.0.tgz", + "integrity": "sha512-SqXfp6QUlwBS+0IZm4FEA/NmmAwcFQIkG3B05BtemOVWXQdZ8j1vV6hDwvA9oMPCmUSrrGpHOtZK7HaHhng2yA==", + "dev": true, + "requires": { + "@commitlint/ensure": "^15.0.0", + "@commitlint/message": "^15.0.0", + "@commitlint/to-lines": "^15.0.0", + "@commitlint/types": "^15.0.0", + "execa": "^5.0.0" + } + }, + "@commitlint/to-lines": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-15.0.0.tgz", + "integrity": "sha512-mY3MNA9ujPqVpiJjTYG9MDsYCobue5PJFO0MfcIzS1mCVvngH8ZFTPAh1fT5t+t1h876boS88+9WgqjRvbYItw==", + "dev": true + }, + "@commitlint/top-level": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-15.0.0.tgz", + "integrity": "sha512-7Gz3t7xcuuUw1d1Nou6YLaztzp2Em+qZ6YdCzrqYc+aquca3Vt0O696nuiBDU/oE+tls4Hx2CNpAbWhTgEwB5A==", + "dev": true, + "requires": { + "find-up": "^5.0.0" + } + }, + "@commitlint/types": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-15.0.0.tgz", + "integrity": "sha512-OMSLX+QJnyNoTwws54ULv9sOvuw9GdVezln76oyUd4YbMMJyaav62aSXDuCdWyL2sm9hTkSzyEi52PNaIj/vqw==", + "dev": true, + "requires": { + "chalk": "^4.0.0" + } + }, + "@endemolshinegroup/cosmiconfig-typescript-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz", + "integrity": "sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==", + "dev": true, + "requires": { + "lodash.get": "^4", + "make-error": "^1", + "ts-node": "^9", + "tslib": "^2" + } + }, + "@eslint/eslintrc": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "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 + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", + "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@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 + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/console": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.2.tgz", + "integrity": "sha512-xknHThRsPB/To1FUbi6pCe43y58qFC03zfb6R7fDb/FfC7k2R3i1l+izRBJf8DI46KhYGRaF14Eo9A3qbBoixg==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.4.2", + "jest-util": "^27.4.2", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.5.tgz", + "integrity": "sha512-3tm/Pevmi8bDsgvo73nX8p/WPng6KWlCyScW10FPEoN1HU4pwI83tJ3TsFvi1FfzsjwUlMNEPowgb/rPau/LTQ==", + "dev": true, + "requires": { + "@jest/console": "^27.4.2", + "@jest/reporters": "^27.4.5", + "@jest/test-result": "^27.4.2", + "@jest/transform": "^27.4.5", + "@jest/types": "^27.4.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^27.4.2", + "jest-config": "^27.4.5", + "jest-haste-map": "^27.4.5", + "jest-message-util": "^27.4.2", + "jest-regex-util": "^27.4.0", + "jest-resolve": "^27.4.5", + "jest-resolve-dependencies": "^27.4.5", + "jest-runner": "^27.4.5", + "jest-runtime": "^27.4.5", + "jest-snapshot": "^27.4.5", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.2", + "jest-watcher": "^27.4.2", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/environment": { + "version": "27.4.4", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.4.tgz", + "integrity": "sha512-q+niMx7cJgt/t/b6dzLOh4W8Ef/8VyKG7hxASK39jakijJzbFBGpptx3RXz13FFV7OishQ9lTbv+dQ5K3EhfDQ==", + "dev": true, + "requires": { + "@jest/fake-timers": "^27.4.2", + "@jest/types": "^27.4.2", + "@types/node": "*", + "jest-mock": "^27.4.2" + } + }, + "@jest/fake-timers": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.2.tgz", + "integrity": "sha512-f/Xpzn5YQk5adtqBgvw1V6bF8Nx3hY0OIRRpCvWcfPl0EAjdqWPdhH3t/3XpiWZqtjIEHDyMKP9ajpva1l4Zmg==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.4.2", + "jest-mock": "^27.4.2", + "jest-util": "^27.4.2" + } + }, + "@jest/globals": { + "version": "27.4.4", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.4.tgz", + "integrity": "sha512-bqpqQhW30BOreXM8bA8t8JbOQzsq/WnPTnBl+It3UxAD9J8yxEAaBEylHx1dtBapAr/UBk8GidXbzmqnee8tYQ==", + "dev": true, + "requires": { + "@jest/environment": "^27.4.4", + "@jest/types": "^27.4.2", + "expect": "^27.4.2" + } + }, + "@jest/reporters": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.5.tgz", + "integrity": "sha512-3orsG4vi8zXuBqEoy2LbnC1kuvkg1KQUgqNxmxpQgIOQEPeV0onvZu+qDQnEoX8qTQErtqn/xzcnbpeTuOLSiA==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.4.2", + "@jest/test-result": "^27.4.2", + "@jest/transform": "^27.4.5", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^27.4.5", + "jest-resolve": "^27.4.5", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.5", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + } + }, + "@jest/source-map": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.4.0.tgz", + "integrity": "sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.2.tgz", + "integrity": "sha512-kr+bCrra9jfTgxHXHa2UwoQjxvQk3Am6QbpAiJ5x/50LW8llOYrxILkqY0lZRW/hu8FXesnudbql263+EW9iNA==", + "dev": true, + "requires": { + "@jest/console": "^27.4.2", + "@jest/types": "^27.4.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.5.tgz", + "integrity": "sha512-n5woIn/1v+FT+9hniymHPARA9upYUmfi5Pw9ewVwXCDlK4F5/Gkees9v8vdjGdAIJ2MPHLHodiajLpZZanWzEQ==", + "dev": true, + "requires": { + "@jest/test-result": "^27.4.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.5", + "jest-runtime": "^27.4.5" + } + }, + "@jest/transform": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.5.tgz", + "integrity": "sha512-PuMet2UlZtlGzwc6L+aZmR3I7CEBpqadO03pU40l2RNY2fFJ191b9/ITB44LNOhVtsyykx0OZvj0PCyuLm7Eew==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.4.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.5", + "jest-regex-util": "^27.4.0", + "jest-util": "^27.4.2", + "micromatch": "^4.0.4", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + } + }, + "@jest/types": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", + "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@nordicsemiconductor/asset-tracker-cloud-code-style": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@nordicsemiconductor/asset-tracker-cloud-code-style/-/asset-tracker-cloud-code-style-10.0.0.tgz", + "integrity": "sha512-t9/Ltx8D48+Dx5SbEKMWTX8fogEHutAq41otBTzXZFjAb0IANw35e68fi886a7i4lpTMkF7KjSXIJb73oUQNMA==", + "dev": true, + "requires": { + "@commitlint/cli": "15.0.0", + "@commitlint/config-angular": "15.0.0", + "@nordicsemiconductor/eslint-config-asset-tracker-cloud-typescript": "8.1.20", + "eslint": "8.5.0", + "husky": "7.0.4", + "lint-staged": "12.1.3", + "pinst": "2.1.6", + "prettier": "2.5.1", + "prettier-plugin-organize-imports": "2.3.4", + "typescript": "4.5.4" + }, + "dependencies": { + "lint-staged": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.1.3.tgz", + "integrity": "sha512-ajapdkaFxx+MVhvq6xQRg9zCnCLz49iQLJZP7+w8XaA3U4B35Z9xJJGq9vxmWo73QTvJLG+N2NxhjWiSexbAWQ==", + "dev": true, + "requires": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.16", + "commander": "^8.3.0", + "debug": "^4.3.3", + "execa": "^5.1.1", + "lilconfig": "2.0.4", + "listr2": "^3.13.5", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", + "object-inspect": "^1.11.1", + "string-argv": "^0.3.1", + "supports-color": "^9.2.1", + "yaml": "^1.10.2" + } + }, + "supports-color": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.1.tgz", + "integrity": "sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ==", + "dev": true + } + } + }, + "@nordicsemiconductor/eslint-config-asset-tracker-cloud-typescript": { + "version": "8.1.20", + "resolved": "https://registry.npmjs.org/@nordicsemiconductor/eslint-config-asset-tracker-cloud-typescript/-/eslint-config-asset-tracker-cloud-typescript-8.1.20.tgz", + "integrity": "sha512-bdi5w17wx5eAetgzfqEpuWnoOCry9a6psu5dQrFijUt599b/HN5chCHbsaODXUIdnoohMQk2izmO+ZfIWsl1EA==", + "dev": true, + "requires": { + "@typescript-eslint/eslint-plugin": "5.8.0", + "eslint-config-prettier": "8.3.0" + } + }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@types/babel__core": { + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", + "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.3.tgz", + "integrity": "sha512-cmmwv9t7gBYt7hNKH5Spu7Kuu/DotGa+Ff+JGRKZ4db5eh8PnKS4LuebJ3YLUoyOyIHraTGyULn23YtEAm0VSg==", + "dev": true, + "requires": { + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "@types/node": { + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.4.tgz", + "integrity": "sha512-6xwbrW4JJiJLgF+zNypN5wr2ykM9/jHcL7rQ8fZe2vuftggjzZeRSM4OwRc6Xk8qWjwJ99qVHo/JgOGmomWRog==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/prettier": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.2.tgz", + "integrity": "sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA==", + "dev": true + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.8.0.tgz", + "integrity": "sha512-spu1UW7QuBn0nJ6+psnfCc3iVoQAifjKORgBngKOmC8U/1tbe2YJMzYQqDGYB4JCss7L8+RM2kKLb1B1Aw9BNA==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "5.8.0", + "@typescript-eslint/scope-manager": "5.8.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.8.0.tgz", + "integrity": "sha512-KN5FvNH71bhZ8fKtL+lhW7bjm7cxs1nt+hrDZWIqb6ViCffQcWyLunGrgvISgkRojIDcXIsH+xlFfI4RCDA0xA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.8.0", + "@typescript-eslint/types": "5.8.0", + "@typescript-eslint/typescript-estree": "5.8.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.8.0.tgz", + "integrity": "sha512-Gleacp/ZhRtJRYs5/T8KQR3pAQjQI89Dn/k+OzyCKOsLiZH2/Vh60cFBTnFsHNI6WAD+lNUo/xGZ4NeA5u0Ipw==", + "dev": true, + "peer": true, + "requires": { + "@typescript-eslint/scope-manager": "5.8.0", + "@typescript-eslint/types": "5.8.0", + "@typescript-eslint/typescript-estree": "5.8.0", + "debug": "^4.3.2" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.8.0.tgz", + "integrity": "sha512-x82CYJsLOjPCDuFFEbS6e7K1QEWj7u5Wk1alw8A+gnJiYwNnDJk0ib6PCegbaPMjrfBvFKa7SxE3EOnnIQz2Gg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.8.0", + "@typescript-eslint/visitor-keys": "5.8.0" + } + }, + "@typescript-eslint/types": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.8.0.tgz", + "integrity": "sha512-LdCYOqeqZWqCMOmwFnum6YfW9F3nKuxJiR84CdIRN5nfHJ7gyvGpXWqL/AaW0k3Po0+wm93ARAsOdzlZDPCcXg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.8.0.tgz", + "integrity": "sha512-srfeZ3URdEcUsSLbkOFqS7WoxOqn8JNil2NSLO9O+I2/Uyc85+UlfpEvQHIpj5dVts7KKOZnftoJD/Fdv0L7nQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.8.0", + "@typescript-eslint/visitor-keys": "5.8.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.8.0.tgz", + "integrity": "sha512-+HDIGOEMnqbxdAHegxvnOqESUH6RWFRR2b8qxP1W9CZnnYh4Usz6MBL+2KMAgPk/P0o9c1HqnYtwzVH6GTIqug==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.8.0", + "eslint-visitor-keys": "^3.0.0" + } + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "acorn": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", + "dev": true + }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "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 + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "babel-jest": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.5.tgz", + "integrity": "sha512-3uuUTjXbgtODmSv/DXO9nZfD52IyC2OYTFaXGRzL0kpykzroaquCrD5+lZNafTvZlnNqZHt5pb0M08qVBZnsnA==", + "dev": true, + "requires": { + "@jest/transform": "^27.4.5", + "@jest/types": "^27.4.2", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^27.4.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "dependencies": { + "istanbul-lib-instrument": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "babel-plugin-jest-hoist": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz", + "integrity": "sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz", + "integrity": "sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^27.4.0", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "browserslist": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", + "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001280", + "electron-to-chromium": "^1.3.896", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "caniuse-lite": { + "version": "1.0.30001283", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz", + "integrity": "sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg==", + "dev": true + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "requires": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "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 + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true + }, + "string-width": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.0.1.tgz", + "integrity": "sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g==", + "dev": true, + "requires": { + "emoji-regex": "^9.2.2", + "is-fullwidth-code-point": "^4.0.0", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, + "compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + } + }, + "conventional-commits-parser": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz", + "integrity": "sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw==", + "dev": true, + "requires": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + } + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, + "dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } + } + }, + "decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "diff-sequences": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz", + "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true + } + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "electron-to-chromium": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.5.tgz", + "integrity": "sha512-YKaB+t8ul5crdh6OeqT2qXdxJGI0fAYb6/X8pDIyye+c3a7ndOCk5gVeKX+ABwivCGNS56vOAif3TN0qJMpEHw==", + "dev": true + }, + "emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "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, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "eslint": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.5.0.tgz", + "integrity": "sha512-tVGSkgNbOfiHyVte8bCM8OmX+xG9PzVG/B4UCF60zx7j61WIVY/AqJECDgpLD4DbbESD0e174gOg3ZlrX15GDg==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.2.0", + "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": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "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.2.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "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 + } + } + }, + "eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "requires": {} + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "eslint-visitor-keys": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "dev": true + }, + "espree": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.2.0.tgz", + "integrity": "sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==", + "dev": true, + "requires": { + "acorn": "^8.6.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expect": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.2.tgz", + "integrity": "sha512-BjAXIDC6ZOW+WBFNg96J22D27Nq5ohn+oGcuP2rtOtcjuxNoV9McpQ60PcQWhdFOSBIQdR72e+4HdnbZTFSTyg==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "ansi-styles": "^5.0.0", + "jest-get-type": "^27.4.0", + "jest-matcher-utils": "^27.4.2", + "jest-message-util": "^27.4.2", + "jest-regex-util": "^27.4.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true + }, + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "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": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-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 + }, + "git-raw-commits": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", + "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", + "dev": true, + "requires": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "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" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, + "globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "husky": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", + "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "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 + } + } + }, + "import-local": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", + "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "is-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 + }, + "is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "dev": true, + "requires": { + "text-extensions": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.1.tgz", + "integrity": "sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.5.tgz", + "integrity": "sha512-uT5MiVN3Jppt314kidCk47MYIRilJjA/l2mxwiuzzxGUeJIvA8/pDaJOAX5KWvjAo7SCydcW0/4WEtgbLMiJkg==", + "dev": true, + "requires": { + "@jest/core": "^27.4.5", + "import-local": "^3.0.2", + "jest-cli": "^27.4.5" + } + }, + "jest-changed-files": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz", + "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "execa": "^5.0.0", + "throat": "^6.0.1" + } + }, + "jest-circus": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.5.tgz", + "integrity": "sha512-eTNWa9wsvBwPykhMMShheafbwyakcdHZaEYh5iRrQ0PFJxkDP/e3U/FvzGuKWu2WpwUA3C3hPlfpuzvOdTVqnw==", + "dev": true, + "requires": { + "@jest/environment": "^27.4.4", + "@jest/test-result": "^27.4.2", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.4.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.4.2", + "jest-matcher-utils": "^27.4.2", + "jest-message-util": "^27.4.2", + "jest-runtime": "^27.4.5", + "jest-snapshot": "^27.4.5", + "jest-util": "^27.4.2", + "pretty-format": "^27.4.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + } + }, + "jest-cli": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.5.tgz", + "integrity": "sha512-hrky3DSgE0u7sQxaCL7bdebEPHx5QzYmrGuUjaPLmPE8jx5adtvGuOlRspvMoVLTTDOHRnZDoRLYJuA+VCI7Hg==", + "dev": true, + "requires": { + "@jest/core": "^27.4.5", + "@jest/test-result": "^27.4.2", + "@jest/types": "^27.4.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "jest-config": "^27.4.5", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.2", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "dependencies": { + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } + } + }, + "jest-config": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.5.tgz", + "integrity": "sha512-t+STVJtPt+fpqQ8GBw850NtSQbnDOw/UzdPfzDaHQ48/AylQlW7LHj3dH+ndxhC1UxJ0Q3qkq7IH+nM1skwTwA==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^27.4.5", + "@jest/types": "^27.4.2", + "babel-jest": "^27.4.5", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-circus": "^27.4.5", + "jest-environment-jsdom": "^27.4.4", + "jest-environment-node": "^27.4.4", + "jest-get-type": "^27.4.0", + "jest-jasmine2": "^27.4.5", + "jest-regex-util": "^27.4.0", + "jest-resolve": "^27.4.5", + "jest-runner": "^27.4.5", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.2", + "micromatch": "^4.0.4", + "pretty-format": "^27.4.2", + "slash": "^3.0.0" + } + }, + "jest-diff": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.2.tgz", + "integrity": "sha512-ujc9ToyUZDh9KcqvQDkk/gkbf6zSaeEg9AiBxtttXW59H/AcqEYp1ciXAtJp+jXWva5nAf/ePtSsgWwE5mqp4Q==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^27.4.0", + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.2" + } + }, + "jest-docblock": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.4.0.tgz", + "integrity": "sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.2.tgz", + "integrity": "sha512-53V2MNyW28CTruB3lXaHNk6PkiIFuzdOC9gR3C6j8YE/ACfrPnz+slB0s17AgU1TtxNzLuHyvNlLJ+8QYw9nBg==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "chalk": "^4.0.0", + "jest-get-type": "^27.4.0", + "jest-util": "^27.4.2", + "pretty-format": "^27.4.2" + } + }, + "jest-environment-jsdom": { + "version": "27.4.4", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.4.tgz", + "integrity": "sha512-cYR3ndNfHBqQgFvS1RL7dNqSvD//K56j/q1s2ygNHcfTCAp12zfIromO1w3COmXrxS8hWAh7+CmZmGCIoqGcGA==", + "dev": true, + "requires": { + "@jest/environment": "^27.4.4", + "@jest/fake-timers": "^27.4.2", + "@jest/types": "^27.4.2", + "@types/node": "*", + "jest-mock": "^27.4.2", + "jest-util": "^27.4.2", + "jsdom": "^16.6.0" + } + }, + "jest-environment-node": { + "version": "27.4.4", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.4.tgz", + "integrity": "sha512-D+v3lbJ2GjQTQR23TK0kY3vFVmSeea05giInI41HHOaJnAwOnmUHTZgUaZL+VxUB43pIzoa7PMwWtCVlIUoVoA==", + "dev": true, + "requires": { + "@jest/environment": "^27.4.4", + "@jest/fake-timers": "^27.4.2", + "@jest/types": "^27.4.2", + "@types/node": "*", + "jest-mock": "^27.4.2", + "jest-util": "^27.4.2" + } + }, + "jest-get-type": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", + "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", + "dev": true + }, + "jest-haste-map": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.5.tgz", + "integrity": "sha512-oJm1b5qhhPs78K24EDGifWS0dELYxnoBiDhatT/FThgB9yxqUm5F6li3Pv+Q+apMBmmPNzOBnZ7ZxWMB1Leq1Q==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^27.4.0", + "jest-serializer": "^27.4.0", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.5", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.5.tgz", + "integrity": "sha512-oUnvwhJDj2LhOiUB1kdnJjkx8C5PwgUZQb9urF77mELH9DGR4e2GqpWQKBOYXWs5+uTN9BGDqRz3Aeg5Wts7aw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^27.4.4", + "@jest/source-map": "^27.4.0", + "@jest/test-result": "^27.4.2", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.4.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.4.2", + "jest-matcher-utils": "^27.4.2", + "jest-message-util": "^27.4.2", + "jest-runtime": "^27.4.5", + "jest-snapshot": "^27.4.5", + "jest-util": "^27.4.2", + "pretty-format": "^27.4.2", + "throat": "^6.0.1" + } + }, + "jest-leak-detector": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.2.tgz", + "integrity": "sha512-ml0KvFYZllzPBJWDei3mDzUhyp/M4ubKebX++fPaudpe8OsxUE+m+P6ciVLboQsrzOCWDjE20/eXew9QMx/VGw==", + "dev": true, + "requires": { + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.2" + } + }, + "jest-matcher-utils": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.2.tgz", + "integrity": "sha512-jyP28er3RRtMv+fmYC/PKG8wvAmfGcSNproVTW2Y0P/OY7/hWUOmsPfxN1jOhM+0u2xU984u2yEagGivz9OBGQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^27.4.2", + "jest-get-type": "^27.4.0", + "pretty-format": "^27.4.2" + } + }, + "jest-message-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.2.tgz", + "integrity": "sha512-OMRqRNd9E0DkBLZpFtZkAGYOXl6ZpoMtQJWTAREJKDOFa0M6ptB7L67tp+cszMBkvSgKOhNtQp2Vbcz3ZZKo/w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.4.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "pretty-format": "^27.4.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.2.tgz", + "integrity": "sha512-PDDPuyhoukk20JrQKeofK12hqtSka7mWH0QQuxSNgrdiPsrnYYLS6wbzu/HDlxZRzji5ylLRULeuI/vmZZDrYA==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", + "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", + "dev": true + }, + "jest-resolve": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.5.tgz", + "integrity": "sha512-xU3z1BuOz/hUhVUL+918KqUgK+skqOuUsAi7A+iwoUldK6/+PW+utK8l8cxIWT9AW7IAhGNXjSAh1UYmjULZZw==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.5", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.2", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.5.tgz", + "integrity": "sha512-elEVvkvRK51y037NshtEkEnukMBWvlPzZHiL847OrIljJ8yIsujD2GXRPqDXC4rEVKbcdsy7W0FxoZb4WmEs7w==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "jest-regex-util": "^27.4.0", + "jest-snapshot": "^27.4.5" + } + }, + "jest-runner": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.5.tgz", + "integrity": "sha512-/irauncTfmY1WkTaRQGRWcyQLzK1g98GYG/8QvIPviHgO1Fqz1JYeEIsSfF+9mc/UTA6S+IIHFgKyvUrtiBIZg==", + "dev": true, + "requires": { + "@jest/console": "^27.4.2", + "@jest/environment": "^27.4.4", + "@jest/test-result": "^27.4.2", + "@jest/transform": "^27.4.5", + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-docblock": "^27.4.0", + "jest-environment-jsdom": "^27.4.4", + "jest-environment-node": "^27.4.4", + "jest-haste-map": "^27.4.5", + "jest-leak-detector": "^27.4.2", + "jest-message-util": "^27.4.2", + "jest-resolve": "^27.4.5", + "jest-runtime": "^27.4.5", + "jest-util": "^27.4.2", + "jest-worker": "^27.4.5", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + } + }, + "jest-runtime": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.5.tgz", + "integrity": "sha512-CIYqwuJQXHQtPd/idgrx4zgJ6iCb6uBjQq1RSAGQrw2S8XifDmoM1Ot8NRd80ooAm+ZNdHVwsktIMGlA1F1FAQ==", + "dev": true, + "requires": { + "@jest/console": "^27.4.2", + "@jest/environment": "^27.4.4", + "@jest/globals": "^27.4.4", + "@jest/source-map": "^27.4.0", + "@jest/test-result": "^27.4.2", + "@jest/transform": "^27.4.5", + "@jest/types": "^27.4.2", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.4.5", + "jest-message-util": "^27.4.2", + "jest-mock": "^27.4.2", + "jest-regex-util": "^27.4.0", + "jest-resolve": "^27.4.5", + "jest-snapshot": "^27.4.5", + "jest-util": "^27.4.2", + "jest-validate": "^27.4.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^16.2.0" + }, + "dependencies": { + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } + } + }, + "jest-serializer": { + "version": "27.4.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", + "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", + "dev": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + } + }, + "jest-snapshot": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.5.tgz", + "integrity": "sha512-eCi/iM1YJFrJWiT9de4+RpWWWBqsHiYxFG9V9o/n0WXs6GpW4lUt4FAHAgFPTLPqCUVzrMQmSmTZSgQzwqR7IQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/parser": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.4.5", + "@jest/types": "^27.4.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.4.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^27.4.2", + "jest-get-type": "^27.4.0", + "jest-haste-map": "^27.4.5", + "jest-matcher-utils": "^27.4.2", + "jest-message-util": "^27.4.2", + "jest-resolve": "^27.4.5", + "jest-util": "^27.4.2", + "natural-compare": "^1.4.0", + "pretty-format": "^27.4.2", + "semver": "^7.3.2" + } + }, + "jest-util": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", + "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.4", + "picomatch": "^2.2.3" + } + }, + "jest-validate": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.2.tgz", + "integrity": "sha512-hWYsSUej+Fs8ZhOm5vhWzwSLmVaPAxRy+Mr+z5MzeaHm9AxUpXdoVMEW4R86y5gOobVfBsMFLk4Rb+QkiEpx1A==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.4.0", + "leven": "^3.1.0", + "pretty-format": "^27.4.2" + }, + "dependencies": { + "camelcase": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", + "dev": true + } + } + }, + "jest-watcher": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.2.tgz", + "integrity": "sha512-NJvMVyyBeXfDezhWzUOCOYZrUmkSCiatpjpm+nFUid74OZEHk6aMLrZAukIiFDwdbqp6mTM6Ui1w4oc+8EobQg==", + "dev": true, + "requires": { + "@jest/test-result": "^27.4.2", + "@jest/types": "^27.4.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.4.2", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz", + "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lilconfig": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", + "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "lint-staged": { + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.1.4.tgz", + "integrity": "sha512-RgDz9nsFsE0/5eL9Vat0AvCuk0+j5mEuzBIVfrRH5FRtt5wibYe8zTjZs2nuqLFrLAGQGYnj8+HJxolcj08i/A==", + "dev": true, + "requires": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.16", + "commander": "^8.3.0", + "debug": "^4.3.3", + "execa": "^5.1.1", + "lilconfig": "2.0.4", + "listr2": "^3.13.5", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", + "object-inspect": "^1.11.1", + "string-argv": "^0.3.1", + "supports-color": "^9.2.1", + "yaml": "^1.10.2" + }, + "dependencies": { + "supports-color": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.1.tgz", + "integrity": "sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ==", + "dev": true + } + } + }, + "listr2": { + "version": "3.13.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.13.5.tgz", + "integrity": "sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.4.0", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "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, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "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, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true + }, + "meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "dependencies": { + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + } + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "requires": { + "mime-db": "1.51.0" + } + }, + "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 + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "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 + }, + "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 + }, + "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 + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "pinst": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/pinst/-/pinst-2.1.6.tgz", + "integrity": "sha512-B4dYmf6nEXg1NpDSB+orYWvKa5Kfmz5KzWC29U59dpVM4S/+xp0ak/JMEsw04UQTNNKps7klu0BUalr343Gt9g==", + "dev": true, + "requires": { + "fromentries": "^1.3.2" + } + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true + }, + "prettier-plugin-organize-imports": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-2.3.4.tgz", + "integrity": "sha512-R8o23sf5iVL/U71h9SFUdhdOEPsi3nm42FD/oDYIZ2PQa4TNWWuWecxln6jlIQzpZTDMUeO1NicJP6lLn2TtRw==", + "dev": true, + "requires": {} + }, + "pretty-format": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.2.tgz", + "integrity": "sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==", + "dev": true, + "requires": { + "@jest/types": "^27.4.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "dev": true, + "requires": { + "global-dirs": "^0.1.1" + } + }, + "resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", + "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", + "dev": true, + "requires": { + "tslib": "~2.1.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "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, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", + "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "requires": { + "readable-stream": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true + }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + } + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "dependencies": { + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } + } + }, + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true + }, + "ts-jest": { + "version": "27.1.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.2.tgz", + "integrity": "sha512-eSOiJOWq6Hhs6Khzk5wKC5sgWIXgXqOCiIl1+3lfnearu58Hj4QpE5tUhQcA3xtZrELbcvAGCsd6HB8OsaVaTA==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + } + }, + "ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + } + }, + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "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 + }, + "v8-to-istanbul": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", + "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", + "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", + "dev": true, + "requires": {} + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "17.2.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", + "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..ccf1e90 --- /dev/null +++ b/package.json @@ -0,0 +1,57 @@ +{ + "name": "@coderbyheart/advent-of-code", + "version": "0.0.0-development", + "description": "Advent of Code 2021 solutions in TypeScript", + "type": "module", + "scripts": { + "test": "jest", + "postinstall": "husky install" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/coderbyheart/adventofcode.git" + }, + "bugs": { + "url": "https://github.com/coderbyheart/adventofcode/issues" + }, + "homepage": "https://github.com/coderbyheart/adventofcode", + "keywords": [ + "Advent of Code", + "TypeScript", + "aoc2021" + ], + "author": "Markus Tacker | https://coderbyheart.com", + "license": "MIT", + "devDependencies": { + "@commitlint/cli": "15.0.0", + "@commitlint/config-angular": "15.0.0", + "@nordicsemiconductor/asset-tracker-cloud-code-style": "10.0.0", + "@types/jest": "27.0.3", + "@types/node": "17.0.4", + "eslint": "8.5.0", + "husky": "7.0.4", + "jest": "27.4.5", + "lint-staged": "12.1.4", + "prettier": "2.5.1", + "ts-jest": "27.1.2", + "typescript": "4.5.4" + }, + "lint-staged": { + "*.ts": [ + "prettier --write", + "eslint --ext .js,.ts" + ], + "*.{md,json,yaml,yml}": [ + "prettier --write" + ] + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=8.0.0" + }, + "jest": { + "preset": "ts-jest", + "testRegex": ".+\\.spec\\.ts$" + }, + "prettier": "@nordicsemiconductor/asset-tracker-cloud-code-style/.prettierrc" +} diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000..6e30f5d --- /dev/null +++ b/renovate.json @@ -0,0 +1,3 @@ +{ + "extends": ["github>bifravst/code-style"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..cc4d480 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@nordicsemiconductor/asset-tracker-cloud-code-style/tsconfig.json", + "include": ["**/*.ts"], + "compilerOptions": { + "outDir": "dist/", + "moduleResolution": "node", + "module": "ES2020", + "allowSyntheticDefaultImports": true + } +} diff --git a/util/manhattanDistance.ts b/util/manhattanDistance.ts deleted file mode 100644 index 798818c..0000000 --- a/util/manhattanDistance.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const manhattanDistance = ( - [x1, y1]: [x: number, y: number], - [x2, y2] = [0, 0], -): number => Math.abs(x1 - x2) + Math.abs(y1 - y2); diff --git a/util/reversString_test.ts b/util/reversString_test.ts deleted file mode 100644 index 177594b..0000000 --- a/util/reversString_test.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { assertEquals } from "https://deno.land/std@0.208.0/assert/mod.ts"; -import { reverseString } from "./reverseString.ts"; - -Deno.test("reverseString()", async () => { - assertEquals(reverseString("Hello World!"), "!dlroW olleH"); -}); diff --git a/util/reverseString.ts b/util/reverseString.ts deleted file mode 100644 index e88b8e6..0000000 --- a/util/reverseString.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const reverseString = (s: string): string => - s.split("").reverse().join(""); diff --git a/util/sum.ts b/util/sum.ts deleted file mode 100644 index 94582c8..0000000 --- a/util/sum.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const sum = (numbers: Array): number => - numbers.length === 0 ? 0 : numbers.reduce((sum, number) => sum + number); diff --git a/util/toNumber.ts b/util/toNumber.ts deleted file mode 100644 index 5b97425..0000000 --- a/util/toNumber.ts +++ /dev/null @@ -1 +0,0 @@ -export const toNumber = (s: string) => parseInt(s, 10); diff --git a/util/uniqueCombinations.ts b/util/uniqueCombinations.ts deleted file mode 100644 index 515355e..0000000 --- a/util/uniqueCombinations.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Returns a list of unique combinations of length n of the items - */ -export const uniqueCombinations = (len: number) => (items: T[]): T[][] => { - // Trivial case: only one item per combination - if (len === 1) return items.map((i) => [i]); - // Otherwise: go over all items in the list ... - return items.reduce((combinations, item, i) => { - // ... and combine it with the remaining entries in the list - const pairs = uniqueCombinations( - // which means the list will be one item less - len - 1, - )( - // and starts from the next entry in the list - items.slice(i + 1), - ); - // which is all previous entries - combinations.push( - // and this element, combined with all found pairs - ...pairs.map((p) => [item, ...p]), - ); - // Return the result - return combinations; - }, [] as T[][]); -}; diff --git a/util/uniqueCombinations_test.ts b/util/uniqueCombinations_test.ts deleted file mode 100644 index 638f31c..0000000 --- a/util/uniqueCombinations_test.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { assertEquals } from "https://deno.land/std@0.208.0/assert/assert_equals.ts"; -import { uniqueCombinations } from "./uniqueCombinations.ts"; - -const seq = [2, 3, 5, 7]; - -Deno.test("uniqueCombinations()", async (t) => { - for ( - const [length, items, expected] of [ - [0, seq, []], - [1, seq, [[2], [3], [5], [7]]], - [ - 2, - seq, - [ - [2, 3], - [2, 5], - [2, 7], - [3, 5], - [3, 7], - [5, 7], - ], - ], - [ - 3, - seq, - [ - [2, 3, 5], - [2, 3, 7], - [2, 5, 7], - [3, 5, 7], - ], - ], - [4, seq, [[2, 3, 5, 7]]], - [5, seq, []], - ] as any - ) { - await t.step( - `combinations of length ${length}`, - () => assertEquals(uniqueCombinations(length)(items), expected), - ); - } -});