{"_id":"@votingworks/ballot-encoder","_rev":"38-eb558bae11ddacc632c883c0ec005125","name":"@votingworks/ballot-encoder","dist-tags":{"latest":"5.2.1","beta":"5.1.1-beta.0"},"versions":{"1.0.0":{"name":"@votingworks/ballot-encoder","version":"1.0.0","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}' --report-unused-disable-directives","prepare":"tsc","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"devDependencies":{"@types/jest":"^24.0.18","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^2.3.1","@typescript-eslint/parser":"^2.3.1","eslint":"^6.4.0","eslint-config-airbnb-base":"^14.0.0","eslint-config-prettier":"^6.3.0","eslint-plugin-import":"^2.18.2","eslint-plugin-jest":"^22.17.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.1","husky":"^3.0.5","jest":"^24.9.0","lint-staged":"^9.3.0","prettier":"^1.18.2","sort-package-json":"^1.22.1","ts-jest":"^24.1.0","typescript":"^3.6.3"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"gitHead":"0971eb734783257da22b314cf8bfadc9502840d1","description":"Provides encoding and decoding services for completed ballots.","_id":"@votingworks/ballot-encoder@1.0.0","_nodeVersion":"12.10.0","_npmVersion":"6.10.3","dist":{"integrity":"sha512-5HSLjWqXirngYQ4cJH2kGIipJfunWK2Ob3M7wdZevB3eOMplPoiW1u81jdu8r+G6NhUa71LZsNtBN0QFO73JxA==","shasum":"536e3d5cc6465a1dbc0f28a6ba5d19688925f2e5","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-1.0.0.tgz","fileCount":68,"unpackedSize":271378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjs4kCRA9TVsSAnZWagAAda0P/2Xi8w2oyZEHjtf3SQJI\nUHKN20AVItDwz7kvIYqUklxGtu6+N4Gp3CtF8GHHdFxbp9AYZBilSocQMeH0\nWu+M+KkZtNUSULkkUK4/C2+OBeNvORrYyGMJmKmdqzaNtMV0BJh2q8Czy77b\nf0P1/kZgrY3g2lCTudluykyizpFR7qmkVABYXvePEX5xaF1+wpIrLv4MzYa0\npTCzBbMAEkK1mZeAD8z3QKPFT5C7bnGSBhwMc/S/gPqrag+WLwBnAytJ6sc6\nk7XoK3OTMG9mdysUGsekdg6EbW5nQDMK7T5vlsSJz8uqjgIhNJTKMY0EVWjc\nNG8ozEwJxktw9J9dn0Ij8EE5aH6CFT/0t5enQaDXNJG+mRXFMkOuOqREIA5n\nh/c9MH8lpatUCyJw7rZHlrwrzmXA87t1s2dm+SBKE+5owJTYiQ7w1uHsarWC\nXlv6EuMx0LyN9vCi9wOynQ6dgLlp8CvaP7jS0Cz/PHMLhb6MGlWg0GDTWJWS\nwFqznMasIINqr7FpWqmF92WBfrtvr5H4R0pxYgwM8bWYrr8YAANDssAgRg4r\nuy4h0V0J1TKHk0xPB2iFOBNFmq4g8K+jY1zzr0gvlB0lwHjTHOwxizl4Bqje\nWqc4HC8+zBKHH5bzO2JRm/fC0PtOC+8HpITSbpi7DKv+ESrzptvynBufmZnj\nesm8\r\n=JWdB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/Ynap+QD3MYxZwXxOnSNuigQwc/7egN0AQ2qn3SUl7AIgS33gGp+W7AnGEu3GV7WFg6X+ic4G0kvEV7aB9t0yFtU="}]},"maintainers":[{"name":"eventualbuddha","email":"brian@donovans.cc"},{"name":"votingworks-owner","email":"brian@voting.works"}],"_npmUser":{"name":"eventualbuddha","email":"brian@donovans.cc"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_1.0.0_1569639971669_0.6628446399862369"},"_hasShrinkwrap":false,"deprecated":"this version is misconfigured and does not work"},"1.0.1":{"name":"@votingworks/ballot-encoder","version":"1.0.1","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}' --report-unused-disable-directives","prepare":"tsc","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"devDependencies":{"@types/jest":"^24.0.18","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^2.3.1","@typescript-eslint/parser":"^2.3.1","eslint":"^6.4.0","eslint-config-airbnb-base":"^14.0.0","eslint-config-prettier":"^6.3.0","eslint-plugin-import":"^2.18.2","eslint-plugin-jest":"^22.17.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.1","husky":"^3.0.5","jest":"^24.9.0","lint-staged":"^9.3.0","prettier":"^1.18.2","sort-package-json":"^1.22.1","ts-jest":"^24.1.0","typescript":"^3.6.3"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"gitHead":"6e42a5bf168af833b8720991eb57ca67b1f727b6","description":"Provides encoding and decoding services for completed ballots.","_id":"@votingworks/ballot-encoder@1.0.1","_nodeVersion":"12.10.0","_npmVersion":"6.10.3","dist":{"integrity":"sha512-AmudgghVb4LACdFbqNybdxtd2C4mwjZ12wM96FJzfyCb+ySdxQlkeQ93KHe6G5Rex5XiEH6HCUQm/vZwnhV/Bw==","shasum":"ab924bf2ecc0d69706e2507def15a09ea96490e7","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-1.0.1.tgz","fileCount":67,"unpackedSize":156902,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjs75CRA9TVsSAnZWagAATYkP/Rtt0BURVXjGFvZD6IRk\niCrzjI0d862PZUpLIsG/8Ytkmv4vVrbbsDm4i5/tRzFMJbEetW6iVJJe9t7d\nKbmK2To6J/zAfs3Z792949SueJgby9RB39PJKfONZz3ivULvQN1LOkxwfiOG\nnIIZ5vfP6NpsZrli/V+wSxz9LNh4kSP3Fsk/oyfED6MOOrHwepdNfh4jUhvG\njR+lfPKCOzNNv2uXpkvNt7z2IhhZ2L6ae9BocQfTLq0QIuJe5nyFeYH0EMnO\n3s6/lRVgRQn9wB6NYHWLBmUVKjZkUpZ5uoKmr8d+QC6UnlGF1Qy/UuplkLRK\nXORVxKd7RxH7/cAqfBNWzn5qSyWsZVd35GtDvZ67Kfl4kA+Y+szs85nrnUKu\nhKGIvMAyg/LP25BVekgT5A0Nn6bFnVySYrP8yJErCxreIDoP69ZkZ7DqXLDF\n681toRroCLskayLahNNugBbAjjit5bw0ChL7m8WLCaYnUWuKoUGmSUd25L2D\nWdi/YD4f1RySSDJSTermfFVu0Pru7f8UeCuBnLKPHVgVP89ULjg4dZ/LjCkD\nwpOk3fwMnGZywIOSUAl5AWMYUci0KgWxRm/cd/7djd8rSp21Z+wzkkx8owxf\nl6TjW50hfnENig71mOk4hEQB7Qaejh9r5lJNRC/AfL37bgVl9d8d75DcqfC2\nGldl\r\n=ACt9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkd8QXgnZ9x25fl8KezCOY76tKuhsqgk0ZiJeAtCYj7wIgWlNnhnl5WOc2+EIonZmuSDL9W36iJ51G/PyTQc8t8k0="}]},"maintainers":[{"name":"eventualbuddha","email":"brian@donovans.cc"},{"name":"votingworks-owner","email":"brian@voting.works"}],"_npmUser":{"name":"eventualbuddha","email":"brian@donovans.cc"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_1.0.1_1569640184535_0.29290712582602496"},"_hasShrinkwrap":false,"deprecated":"this version is misconfigured and does not work"},"1.0.2":{"name":"@votingworks/ballot-encoder","version":"1.0.2","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}' --report-unused-disable-directives","prepare":"tsc","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"devDependencies":{"@types/jest":"^24.0.18","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^2.3.1","@typescript-eslint/parser":"^2.3.1","eslint":"^6.4.0","eslint-config-airbnb-base":"^14.0.0","eslint-config-prettier":"^6.3.0","eslint-plugin-import":"^2.18.2","eslint-plugin-jest":"^22.17.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.1","husky":"^3.0.5","jest":"^24.9.0","lint-staged":"^9.3.0","prettier":"^1.18.2","sort-package-json":"^1.22.1","ts-jest":"^24.1.0","typescript":"^3.6.3"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"gitHead":"b193f65bad58ff82708fa58d03bf30186377aaa0","description":"Provides encoding and decoding services for completed ballots.","_id":"@votingworks/ballot-encoder@1.0.2","_nodeVersion":"12.10.0","_npmVersion":"6.10.3","dist":{"integrity":"sha512-qFBiEEzdjP6fK1tOUdUeCLgDZF0wYwuAxUNYOmlsRScj1xVsv3HNFMANeUgkkNUkZ4QhJNIPXecYB3oPBz+GDg==","shasum":"b00b73f2df64ccf5a0d34517efb47a7701181be3","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-1.0.2.tgz","fileCount":68,"unpackedSize":216828,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjs/XCRA9TVsSAnZWagAAgOQP/0I0t95xZ4raULFnMueQ\nMV4dc6cGrNpWFotCaTwrpHzs3GSBFhyl7ZLjRMdc0aYi+jIoG2zeTlCs2wgq\n4kgikhm9c+YJ/18NTafggDK0Lo+aRkOl8mZHNRK3eUyf/ELsPYtWb/vNn+XR\nHv7NflmdflnI6/Zt4jZWBawW9P2jqwElBAwshhz/qxcB7O8JXExgpeDB8CqA\nwsF0FbsBy6v06mQ61GnBu90pRF0JY02i/N1rC7G78S99Ui0S+vKQ+3g14AYC\nRm27T/RZcjY+axVkl0i/8Jpglr20ts2y3wOJnW8VfD/d05TmEkuafQQakuwg\nVZWaN59M3nhTqSG8wF3TcvGl0/NmhS9Uuu/zY9J9BV96w7gzqAvOEBtMegm5\nxG0l2WA3P5a7n8sOapggcrQsPS1uuiUM89a6p8KQnDSgPLx2r3STQY4biyAu\nuPuoAwzOiijWXyU0hyJreL1cx1rtRZZXY7eAUuQoS+zQhQtW/Z0pAm1SI4ew\nOEdx1khhwrooYpRtV1r+I+MxLWtq8QTnM4EhUon/A7EPAwwNjIMmw4IaApYM\ntMyjMujafuPTKxEIJ/wQrwbHZbcGQTHLJzK8XTH6jccskojkV4lZLiOt5dx7\nAXrHzOsxd80i7bpufmydfEjEY59szAOjymUGxDvXDGuecVyaYvgpQt/zuto1\nLMmD\r\n=w5xW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG3FXAP/uqSRN1DdfBl/iK8Hsicv8vKJCC0K4b/LmoPrAiEA4cFgiqBdyNBFfh6Q0JgboqzvhOkW5QdcWyOR10PaRMQ="}]},"maintainers":[{"name":"eventualbuddha","email":"brian@donovans.cc"},{"name":"votingworks-owner","email":"brian@voting.works"}],"_npmUser":{"name":"eventualbuddha","email":"brian@donovans.cc"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_1.0.2_1569640406825_0.6472860265195435"},"_hasShrinkwrap":false},"1.1.0":{"name":"@votingworks/ballot-encoder","version":"1.1.0","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}' --report-unused-disable-directives","prepare":"in-publish && tsc || not-in-publish","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"devDependencies":{"@types/jest":"^24.0.18","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^2.3.1","@typescript-eslint/parser":"^2.3.1","eslint":"^6.4.0","eslint-config-airbnb-base":"^14.0.0","eslint-config-prettier":"^6.3.0","eslint-plugin-import":"^2.18.2","eslint-plugin-jest":"^22.17.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.1","husky":"^3.0.5","in-publish":"^2.0.0","jest":"^24.9.0","lint-staged":"^9.3.0","prettier":"^1.18.2","sort-package-json":"^1.22.1","ts-jest":"^24.1.0","typescript":"^3.6.3"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"gitHead":"15efcdf6c3d1e5ce1ac480539c6db15ad10d0830","description":"Provides encoding and decoding services for completed ballots.","_id":"@votingworks/ballot-encoder@1.1.0","_nodeVersion":"12.10.0","_npmVersion":"6.10.3","dist":{"integrity":"sha512-wZiV51t15BsvbMZ3RHyl55NT7t+lgFcXqXrJ6UGrLVyypy0igtZEwEz9WjodTMDFcUXorLZqLd5f1F+epQSjKA==","shasum":"bd91937eafad330c50904efa9b9bae4550c1f744","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-1.1.0.tgz","fileCount":69,"unpackedSize":229197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdkprGCRA9TVsSAnZWagAArsEP/0m9kGQTMApvBPdQWwm8\nXrBjhdeFfrcMvYevGXYdSG3MuOi1YGhMmqJb9HmUD4D1Z2Ehiz2KDQlj09BB\nUECY3gdni1UYDK2FzrybqNhce5rRatU1vLQmy7YiAfW3NFQN3sGlPnO4MM+v\npLiTp9mnbaGpgtX5ix4Dqz6NJCeVMF5Uh+eynbBLRxjg7Awu7XKzoAYwgxRg\nfwbWaLPWzmusrlN8les8opg2QBW/pKvjgopFK2wr0e5arWhL2hA+27Wr2k+F\nWerHddDFYrHF1PSjLW1wRXOv2lPApqPMRvrT3KoPvcT3TzYkRrDBWUR4K95Q\nFqDo5jJVNuJ2pjS4OCi1vSrpI4U199255+n5DVCYw399UQUCisVvoavyUwjC\nbqFj7vAmZwRkw8xuNNGwkkXq/y0bpElzf1nmgaORrL6O2w2gfPrbfL5z9Q+l\nrhgdR9E8phq2XMA8gXkKpExaMBX5WQD5dC6nvdH3Ch3mCA1gZ+OXT7lwh/RD\nDd3huN0ojRPZ4v93iK9YyWVhFfxThXGY8pbBu3VTwPytXvw9Rj04H1Y4gH/L\nWAe2u19ljjWCc8Srm+20WkOImsXNEV2XP65lBdsidF55oBSJFcA2AsfJxJh4\nf1YIFhhftm/b9jnn7ooVEznlEV+uPUT2YHxiGazrRnNuXUphorXbu9RzKe2e\nsh76\r\n=TG9U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3Ue6kBlO+f7oUuNRkKLY0Ui4r8W+/mPrAfq8xb3FlYgIgSScmPxRHsT8EKQh4wbiwhZ1FbUEMiRS9oS2FX4hNCvY="}]},"maintainers":[{"email":"ben@adida.net","name":"benadida"},{"email":"brian@donovans.cc","name":"eventualbuddha"},{"email":"brian@voting.works","name":"votingworks-owner"}],"_npmUser":{"name":"eventualbuddha","email":"brian@donovans.cc"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_1.1.0_1569888966032_0.7390192247633438"},"_hasShrinkwrap":false},"1.2.0":{"name":"@votingworks/ballot-encoder","version":"1.2.0","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}' --report-unused-disable-directives","prepare":"in-publish && tsc || not-in-publish","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"devDependencies":{"@types/jest":"^24.0.18","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^2.3.1","@typescript-eslint/parser":"^2.3.1","eslint":"^6.4.0","eslint-config-airbnb-base":"^14.0.0","eslint-config-prettier":"^6.3.0","eslint-plugin-import":"^2.18.2","eslint-plugin-jest":"^22.17.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.1","husky":"^3.0.5","in-publish":"^2.0.0","jest":"^24.9.0","lint-staged":"^9.3.0","prettier":"^1.18.2","sort-package-json":"^1.22.1","ts-jest":"^24.1.0","typescript":"^3.6.3"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"gitHead":"569e976dfea271b17bcf8868820cb57b0b64c382","description":"Provides encoding and decoding services for completed ballots.","_id":"@votingworks/ballot-encoder@1.2.0","_nodeVersion":"12.10.0","_npmVersion":"6.10.3","dist":{"integrity":"sha512-TlCfcO2agFz9qS1vg3JqLGuTuxG46qD5HSMiLs3PooQ6mOMifEXOzEYkY/cv71xaSCxSy621DKfB/ilYX6TNwA==","shasum":"e2721f2f009d5f5d333baf9d7e162960623f7157","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-1.2.0.tgz","fileCount":69,"unpackedSize":234355,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdm4EqCRA9TVsSAnZWagAAKT8P/1ZPXB8eESHxvBxJ9/Ha\nwfWvzDFNY++N7Yo1eiyQqJRWniUuY4r+pZA0rT1WdPtOPRMsM/PxcDl2XBZz\ndvPZS5dU52co2DjyDUPnZpG6Bq2kxmgDw81DXUlDYL+8j60OVhqKIl5EdKeC\nyY8yr4sTZrd3IXHKxnZaiSoDfKPaf9v1578Vm9am/1TYqS9OkXshKFF85ARX\ngZoXPihuzNh3tsT45W7em5iy7rluZGnlTiHsnK8PSiGrREJulvaEiSw2iPT3\n8vCg8vSMSwtjkmXT4ok7A9SvRB3Tv76zhy3nqCPoatgD/cPgifVHTvTk4OGd\n+QBRF978B0mBHxUAvzRfb49BpZIgVrzGCLfszOh2Muw5CA4UuHe+HaTvG8MX\npAN++7JZjFdifCoAXFO5/xmdRLKVNqCdkeJYE1dLLfMaaYTrFjM/NW8Jtc5P\nzR+UNHN0QggrzHo7Pacdsq3ACINiKwarvrY8dj7c7U7e3nsw5QYGON4OeQDN\nWcG+NwN2xQHYAdX0MCu4MDaav4Jh0NUP3UzpRdqJPut7EXkgZ5789HTi3DIp\nu6N32xGBJ82duhPWm23yZTdCZraRygYSg6tk2sYN5aX8IN1tu6MWdsPzJOQq\nu0sFHd8ovFR1qS4keKlboqgev1j2xTsC+7YXG/LCdCX8FKOhg27JPpGt9PLB\nvd4v\r\n=4Vgj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDR/pHoBy6paKv5cJecvvzV4hbYwNkr26FZUhDYzegUnQIgVW8h4k7wu+DSro5Hn0Nf7SMuEZ0cqQv+ZrbBLX6Ta8g="}]},"maintainers":[{"email":"beau@beausmith.com","name":"beausmith"},{"email":"ben@adida.net","name":"benadida"},{"email":"brian@donovans.cc","name":"eventualbuddha"},{"email":"brian@voting.works","name":"votingworks-owner"}],"_npmUser":{"name":"eventualbuddha","email":"brian@donovans.cc"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_1.2.0_1570472233835_0.5516857184635624"},"_hasShrinkwrap":false},"1.3.0":{"name":"@votingworks/ballot-encoder","version":"1.3.0","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}' --report-unused-disable-directives","prepare":"in-publish && tsc || not-in-publish","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"devDependencies":{"@types/jest":"^24.0.18","@types/node":"^13.7.2","@types/random-js":"^1.0.31","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^3.3.0","@typescript-eslint/parser":"^3.3.0","@yarnpkg/pnpify":"^2.0.0-rc.18","eslint":"^7.2.0","eslint-config-prettier":"^6.3.0","eslint-plugin-jest":"^22.17.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.1","husky":"^4.2.3","in-publish":"^2.0.0","jest":"^25.1.0","jest-watch-typeahead":"^0.4.2","lint-staged":"^9.3.0","prettier":"^2.0.5","random-js":"^2.1.0","sort-package-json":"^1.22.1","ts-jest":"^25.2.1","typescript":"^3.9.5"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"_id":"@votingworks/ballot-encoder@1.3.0","dist":{"shasum":"388c22c944a7a34de4ca46b4f8becf5b33291c7d","integrity":"sha512-WLnWeCuDSvavoga3iG8QylOdsHwZqBmA+gsTBw8yqD5j11kw2RcfRk4/6ZFwVQlYFqCmQUrgtgrvOis8ayPWwg==","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-1.3.0.tgz","fileCount":49,"unpackedSize":222441,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe+jvRCRA9TVsSAnZWagAAyFQP/R5HIoskkHBaD9Ytu7TH\no7k8emkxTVToQgCNzMDDfxmw1F/9IHvPyUXKjr3W1P2WbKSmNSIOr0iA4deU\n463/myThG6VNMNc5daX1wsK9gJx1LZNrgfak3ZKoesbucbi74hCDbuuFwiWa\neH2plvWL3KcV7ArgHWn2r2JBTdix2khFQ36IFdU2VxCZLqvaKqM/r/KVN9PF\n9IoQlJziEXFF/f/0nx9j/xJ4iO2O+UI4oXn9aFF7wrf5t+F/Z1dLFMyRGcdN\n4y7NwhaAOut0ss+Sf53mIf7BGwJPZPH7cqKhV2jq7sKPP1zF4GyB2Z+Hj4/k\nnZvXzYrGIiHO8Niml4TnkfEhHF/rAjO3qr0JIDpUQLAh6AWcf/f3XPaf9X8x\nb1yYHH1qs5ikYmVyetEFJs6L5sHXw85w6t2pH6XFpzsktd3YjdAOl6D90NJn\n3oJkiPczdJLowYbh3NJTjlBqoo3q1fkEcGXul/MrFNu1RIXlEL/73szf6ndB\nb0yq3SyM9F565SmoZd8JIEPUyVqadcRrb6w9x/hqIzwchIZASQWcbT4aDfVm\n0nmfMGG44phs++9U9f2GzMuM2i72m4NFdVH6ed+FzVgJkSGINFV6KTeaNcm7\nUUFFCkmDKSnBPrxeEsv/DH0Y6+Hf1b+6XhsbEa9gYrztraNnyq63uHDGYcEB\nxZ5n\r\n=S46I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBb0RITxdrvoWtvldTE/uH9v5Pb2JfxBt9iZmNA1aE+xAiEA/RnOpzoCuq1D+qXiY8pS6FprGMCmIuWsKcBi4QwSlr0="}]},"maintainers":[{"email":"beau@beausmith.com","name":"beausmith"},{"email":"ben@adida.net","name":"benadida"},{"email":"brian@donovans.cc","name":"eventualbuddha"},{"email":"brian@voting.works","name":"votingworks-owner"}],"_npmUser":{"name":"beausmith","email":"beau@beausmith.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_1.3.0_1593457616918_0.29619476870830286"},"_hasShrinkwrap":false,"deprecated":"Missing files"},"1.3.1":{"name":"@votingworks/ballot-encoder","version":"1.3.1","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}' --report-unused-disable-directives","prepare":"in-publish && tsc || not-in-publish","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"devDependencies":{"@types/jest":"^24.0.18","@types/node":"^13.7.2","@types/random-js":"^1.0.31","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^3.3.0","@typescript-eslint/parser":"^3.3.0","@yarnpkg/pnpify":"^2.0.0-rc.18","eslint":"^7.2.0","eslint-config-prettier":"^6.3.0","eslint-plugin-jest":"^22.17.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.1","husky":"^4.2.3","in-publish":"^2.0.0","jest":"^25.1.0","jest-watch-typeahead":"^0.4.2","lint-staged":"^9.3.0","prettier":"^2.0.5","random-js":"^2.1.0","sort-package-json":"^1.22.1","ts-jest":"^25.2.1","typescript":"^3.9.5"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"_id":"@votingworks/ballot-encoder@1.3.1","dist":{"shasum":"f26af8e522648e8fdab3471636c9a77843d0f6a6","integrity":"sha512-XFbXNTUkr/1MdR5X/9liPxY6vrwNMrv9STQL/yG62jOL7EtlI0xSRS5hWHE6I4dn0icCeF6d47h2bHaLv8+y0g==","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-1.3.1.tgz","fileCount":71,"unpackedSize":316578,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe+jyqCRA9TVsSAnZWagAAhVsP/RW8r3kWUY9D1aADcIIG\nwFs7QLU/onrqJ1QlVt0u9kzurdpAq1q/Ywg/Gv/bmlT5NPCAgPOL4AnrJmaH\nSG9mpJooHonLGekGtABToioE20Y81KUAh0MopC4T3Gu9xBtBrN5mfgg9NZfi\nJQhCqSOUMzWdXB3X6fc3ksl9DGQmVxe3KPR/pWeY65T7pID3wwBhRbHxfWbj\nm8ud8TIqan/yGIV361cnAZhzuJ+bRO9HJRqTahuR96UdOuyr5suCvdpledAY\noOfApWjTV+GmaTnl73oNFIDRyYdc1lYiA/GQAvdU0SpXl7uhaO4Hj/991fyL\n1OmVulj8ISVgkxHeMgjQB/GL2lwpTk6Dh7JEvDtIa5OgXOdAgONU/3N00TWK\nP1fe0FWNxOhGnBLydS5SQCRvSQUl8N9MyAyY+AJzArP7+j6uOy3dlGIaNR+d\nK3MESaU1TEZtYvbwf1n0P+o14OaIie1fseI6hZt9x2+D+dbUv7I59OHqMiTJ\nmRt/VT5cjPsQ+dKnYQ2RjvXLfvHEBww72CY4+w/BoOw0bVUJclTxQltYgCzi\nbxj0vau+/l3+Zu8A23bVnUo2Ehjpk+Vp5kQJsWndnlqJ6HIzqsb3DpjbO9rS\nBa8q/MToJzvxV0p2m/6pd3dKrJ+gzR7VN1/m6Qfv/yS+w8PveDFRb4JnNdxJ\nck5Q\r\n=N+74\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGD10kxTcZDzXniqFuX0O1dQhdytIc+bS5EF3GdIflABAiAfLbm+tjVy5Ecu5Q//BI42OB33kC0HzQ9wGWSF5Mm41A=="}]},"maintainers":[{"email":"beau@beausmith.com","name":"beausmith"},{"email":"ben@adida.net","name":"benadida"},{"email":"brian@donovans.cc","name":"eventualbuddha"},{"email":"brian@voting.works","name":"votingworks-owner"}],"_npmUser":{"name":"beausmith","email":"beau@beausmith.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_1.3.1_1593457834467_0.6143348637164976"},"_hasShrinkwrap":false,"deprecated":"Poor translations"},"1.3.2":{"name":"@votingworks/ballot-encoder","version":"1.3.2","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}' --report-unused-disable-directives","prepare":"in-publish && tsc || not-in-publish","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"devDependencies":{"@types/jest":"^24.0.18","@types/node":"^13.7.2","@types/random-js":"^1.0.31","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^3.3.0","@typescript-eslint/parser":"^3.3.0","@yarnpkg/pnpify":"^2.0.0-rc.18","eslint":"^7.2.0","eslint-config-prettier":"^6.3.0","eslint-plugin-jest":"^22.17.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.1","husky":"^4.2.3","in-publish":"^2.0.0","jest":"^25.1.0","jest-watch-typeahead":"^0.4.2","lint-staged":"^9.3.0","prettier":"^2.0.5","random-js":"^2.1.0","sort-package-json":"^1.22.1","ts-jest":"^25.2.1","typescript":"^3.9.5"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"_id":"@votingworks/ballot-encoder@1.3.2","dist":{"shasum":"21a99f271f5f5b225bd6a2d956730b3265702de1","integrity":"sha512-uE+NZX6vgw0eETcFniKBe7nC841LEECqsWkx3CASguKoEzv+Yyhe49SdavtuaU37Pucz+xLdOImFG4sI5zIgcw==","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-1.3.2.tgz","fileCount":71,"unpackedSize":316584,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe+5/fCRA9TVsSAnZWagAAUVUP/3JAl5iBdK81z9nOeHg/\nzR8j9wb2Gz/Ls8Q1fuUS7MANvH4YTQKSqN48NI0MlT+U1WFA3xIYjAxIs1kc\nBPMcR8uBGXazYiJ5hZXB/ByufpzgAFK5FgTg2IOLE56jrFA/J+VnWVNzHKB3\noq8ukYZMxl7nxGORJMrb4BWdFqnR6mwcLuWu1qp5xtc5JgRnJhcxm878sAHx\n663BHTMgpnsUshkKEk3ZTaBLwIh1O9Gh2k5OGiTOk9/HXLmsbFLapXao6ymi\nWPZwjiAc58yCdJPAZbK2lQd3MKD/rmIm6VLZiA3dPEwQtLuDDxfqV2bDPt97\nYFfIEsRGU0Ne+IyESSCHungiwLu2zg3T6+GNaRcC+kKZcMwKvDlnbKPTAp3x\nlgZukPAYETQqHrALH9Y4fk3D7D16YbYvT+SJMvqrKtX/C9iAFm0RBUd6Wk1T\nb+TVTTvOZynCtCy+TOrd6rxtZnUOGmcLDSAKMBP8EBO4+lcBwjIKjBF6OX2L\nkHNbObQ+kDwOCKmoGY8IhX9Of+rz7IJWCN7GSSm+p5eoAYJilp772S0Zn2c0\nOzND+rp2skykI0lmyZOUFjKb2jqDqhCx7vZd1GfxW2aWkc/+IkuPgHCBlQ6n\nzg9yfWHYGbNgMCsLzOCONn5syovmhNpehmrm0IbwN0/h0roQ33hhllrpXQpa\napVY\r\n=Yn92\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCx+3N/DnX8JAHw06Ir+/sqzRQ+tP8pk7Byu4qsAEBLqgIhANFwij3LSmOC+VE2WtHWvbNS2a9LB+CojLIPhCCd02WW"}]},"maintainers":[{"email":"beau@beausmith.com","name":"beausmith"},{"email":"ben@adida.net","name":"benadida"},{"email":"brian@donovans.cc","name":"eventualbuddha"},{"email":"brian@voting.works","name":"votingworks-owner"}],"_npmUser":{"name":"beausmith","email":"beau@beausmith.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_1.3.2_1593548766881_0.1837555383399967"},"_hasShrinkwrap":false},"1.3.3":{"name":"@votingworks/ballot-encoder","version":"1.3.3","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}' --report-unused-disable-directives","prepare":"in-publish && tsc || not-in-publish","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"devDependencies":{"@types/jest":"^24.0.18","@types/node":"^13.7.2","@types/random-js":"^1.0.31","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^3.3.0","@typescript-eslint/parser":"^3.3.0","@yarnpkg/pnpify":"^2.0.0-rc.18","eslint":"^7.2.0","eslint-config-prettier":"^6.3.0","eslint-plugin-jest":"^22.17.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.1","husky":"^4.2.3","in-publish":"^2.0.0","jest":"^25.1.0","jest-watch-typeahead":"^0.4.2","lint-staged":"^9.3.0","prettier":"^2.0.5","random-js":"^2.1.0","sort-package-json":"^1.22.1","ts-jest":"^25.2.1","typescript":"^3.9.5"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"_id":"@votingworks/ballot-encoder@1.3.3","dist":{"shasum":"354b31d90acabc2cb4be0b7b5731cfdf8a38b745","integrity":"sha512-aQ07Sb1NZFegWNnhpW81MkCX3Ggn768jxf8oD6qjcJbTMsiZPaA3L54yEkCTP6hYhv9aSzbGA0zuHdBbtabj6A==","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-1.3.3.tgz","fileCount":71,"unpackedSize":316586,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe+6/hCRA9TVsSAnZWagAAytwP/R4y3F9Mi2z7xuMc8l5b\ncXrgqvesJSnEopTbUPoFtIjvrjv74nnW8R4uORjCaRS8F97WHZ4w2Kw98UVL\ntmycCUHC3iMFz7JsXh6mREiFi/2nA+/Mrq4K8c2F6X1JA+2+GrpjzXMWp2Bd\nMDgdfbWLqb29/Juj7+hB8uViImnNJqdOUhi7aTGSH6Ni2Yhr6+oIYAfXMIVs\nE2gT60OVCtWmXzIYhvjw1ud7LqSkGcBuMnks7YRJriVd2pxD5Jk2BWU0SENi\nV9VFHPNchZvtDVasKaYa7e8OHvR88R+YD7IOLTN5O6V2kJv0H4iGYRe3ZDAs\nObdtWBDYG9H05mttKlp0ZC7C8DQ2jvyjssjVFSkrq87HCBVNupJDGxYA+HDw\nFGKoNsJtFaw1/qB/E5TlIG0+lhUgretF0LGT+OTfnucolU0ofJBXRyWMz+EX\nYfJC4zXCZh2DsePFCAXiMYxKrhPx6dKCSyu5liEtyNUh9ZZ8xCDF7xAJ2Pst\npBboUuZY/kmCQzNpaEcK3DKbUeWRO54OnsWpYyrg5XfgP03SNgv3DMLN6X6N\nBcjXF80X7aRGja0cHNZYSABlLsgN3/eDzBDdnrR2PgUpcv6+cNZPVpmxr6Eg\nhAsUqmD7dTp0PNPxW5ERR+aOZzMNwQ30YVQQbLC+HKd4Hhlqp1xDnRQFvihL\nLFbh\r\n=EI8u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFiygtL9eoPNSRBYgqGgs8wMD3Px2LHf1aOOJHEJJL8PAiB8XMsQMPNbgmRqqSjaH/3O5+GA8NTW4pz8+3W8cGa5XA=="}]},"maintainers":[{"email":"beau@beausmith.com","name":"beausmith"},{"email":"ben@adida.net","name":"benadida"},{"email":"brian@donovans.cc","name":"eventualbuddha"},{"email":"brian@voting.works","name":"votingworks-owner"}],"_npmUser":{"name":"beausmith","email":"beau@beausmith.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_1.3.3_1593552865399_0.9906905386922871"},"_hasShrinkwrap":false},"1.4.0":{"name":"@votingworks/ballot-encoder","version":"1.4.0","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}' --report-unused-disable-directives","prepare":"in-publish && tsc || not-in-publish","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"dependencies":{"@antongolub/iso8601":"^1.2.1","zod":"^1.7.1"},"devDependencies":{"@types/jest":"^24.0.18","@types/node":"^13.7.2","@types/random-js":"^1.0.31","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^3.3.0","@typescript-eslint/parser":"^3.3.0","@yarnpkg/pnpify":"^2.0.0-rc.18","eslint":"^7.2.0","eslint-config-prettier":"^6.3.0","eslint-plugin-jest":"^22.17.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.1","husky":"^4.2.3","in-publish":"^2.0.0","jest":"^25.1.0","jest-watch-typeahead":"^0.4.2","lint-staged":"^9.3.0","prettier":"^2.0.5","random-js":"^2.1.0","sort-package-json":"^1.22.1","ts-jest":"^25.2.1","typescript":"^3.9.5"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"_id":"@votingworks/ballot-encoder@1.4.0","dist":{"shasum":"e2e0c60b01f7f6f94cb5b91e3d3ef1720aaabc97","integrity":"sha512-q1R1+MrpGyQmtfjubCnuuPQXXb5Bbn/BpQardKvtuiWH5j5ow5G4ssW3M+eInUUJcub+XXnQDc+FIapWxrSW1g==","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-1.4.0.tgz","fileCount":74,"unpackedSize":337940,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe/qliCRA9TVsSAnZWagAAeyQP/iltWXaJt+MDA2F8i3D/\nQV1vn3UeHDMPo4MB4QqCcytC7YQMW2OlfqipHWsEfPbpe1CJr3K98/XsOsMm\nCFP4m/lmZ7FEWlfX0yEoXdP9Y0c74BXujNV3D19fs1DuHiRDB+zJBo3QoliA\nEX8JB6rzyvKatdJZxmPhzvkkCvhyUjgsjcmT24cdoOtvMZs5vs1AcNDpKot1\nwHTBSzRV/zF6Cxmg2i0nQELinwhqzXU5moTFXSwPrCP5Itd8wSAhEpohXbsP\nRf70kl45s1Dm093bHA2kJiTX7HXx2c0zSGUmLOtKFFCwhii3h19zCYnyQXN/\nhOEy4a0ZV/Uz0+xdetdn/aQkLhJ5fPHxcYpcjuW7G1fVG4ouPsQZIvzlKcdm\n0knlo8z3JVw2h7CqODFwhyrYlsulKKYpZsrvjigwO/KtZJv86upyj6EZug2e\nZfVKfbP51urNtQxBR3u/bk28lFJp4rbcwbZjqBnqcLjviVlBSxmXYyQUP8WR\nH7jjhH+z1sabgWRx13wgVzP44TasamoMAL0SqSEa+3YUjavuQwp0ZFBN5A7R\npbaHO2YOCxhpumfAxCTx+oA/wqhXT14Pjne8B3TJzmLAK0HlCWBoWjsnAyO8\nvei+wz/UmDkq/N5GuSKihNZ01rGawj6eK/vx/spUqi5gJYRpRNk/Hqkv8Cz1\n/JWG\r\n=wmjk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCbaz3kkh7Xq+NsE4uzaxs61tSaU4gNnQD9IqGQCGCLtQIgF0p4Fs9yJXPjBDH5sXs1rKE8uNd7oGfTlnODSki7S2M="}]},"maintainers":[{"email":"beau@beausmith.com","name":"beausmith"},{"email":"ben@adida.net","name":"benadida"},{"email":"brian@donovans.cc","name":"eventualbuddha"},{"email":"brian@voting.works","name":"votingworks-owner"}],"_npmUser":{"name":"eventualbuddha","email":"brian@donovans.cc"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_1.4.0_1593747809861_0.9723252149721975"},"_hasShrinkwrap":false},"1.4.1":{"name":"@votingworks/ballot-encoder","version":"1.4.1","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}' --report-unused-disable-directives","prepare":"in-publish && tsc || not-in-publish","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"dependencies":{"@antongolub/iso8601":"^1.2.1","zod":"^1.7.1"},"devDependencies":{"@types/jest":"^24.0.18","@types/node":"^13.7.2","@types/random-js":"^1.0.31","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^3.3.0","@typescript-eslint/parser":"^3.3.0","@yarnpkg/pnpify":"^2.0.0-rc.18","eslint":"^7.2.0","eslint-config-prettier":"^6.3.0","eslint-plugin-jest":"^22.17.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.1","husky":"^4.2.3","in-publish":"^2.0.0","jest":"^25.1.0","jest-watch-typeahead":"^0.4.2","lint-staged":"^9.3.0","prettier":"^2.0.5","random-js":"^2.1.0","sort-package-json":"^1.22.1","ts-jest":"^25.2.1","typescript":"^3.9.5"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"_id":"@votingworks/ballot-encoder@1.4.1","dist":{"shasum":"8ab86b20389c7f274435f018e167556cc6f4fe62","integrity":"sha512-2NK8GxS9NuetF1Fab3TEQ1BFaHlwcZwDuinfjhqMR38Y5Uboxelfeh1L36HZzWQmXNaAJnJsXb26FCup4ZXgxg==","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-1.4.1.tgz","fileCount":74,"unpackedSize":348130,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfA4EECRA9TVsSAnZWagAAlFkP+QDGRtuvxLVg6W5MOSfd\nB7/JltcBVBJgsxHnotTK7U5K6fYbBEGrPduoLr2SeK1AGRfpLzVgLfdvK/wh\nML5sj0dyXTTYV/iG+zdo+v5ttvEuiTOFxPELSWzA2HfD7cMtVxjgx9KhGRNX\nKrEHQnPcKXwFyS6q3lcoaSx4o8sNT97hzpseLadT1zNnJ5d8E/i9e+0ou5SZ\nDk/uctt8uo+DaVlq22H2Ww2vnlZtfDZU5lSnnbj8dYjtzgwD8hYJ3YwxPEVs\nGWL3WBRhqkBukft7k212i20xPKEMlRcrNNhacr1AR+3BxFUsVelgujoyfEzk\nqxDNqGn1+pbOLq2K51dDNWJECnGRPP+NwaYU3R/COIuRYRCC8bbob24uVmMm\nYCeecXBrQPF1/oi/FPJSvmg/tsJa3xT8zr8AQ9x+RWAsmpKlYPdkLrkFVUcC\nPFUIq0KNVjOAT5zxq9y6QQ9zZWemjyLgqh2leK4/Vp/SuL4+3jLEX/ofWi9I\nWUzhAA1EzZIFjMxM+fJYCAECrsS+jjZatWcqSKOUetkIDOa/XsVID4+1MHHg\n9ioDn/9kfr/V/HPicD+ph5F6QKZRLT/pIJZ89DFlnVO290NfB6t3IY43VyO3\nFJusKkOSpfGuuQAi/a3F/kjis2Z4CgXa9sq+PEXifj94P68XfDp/m3v3onh4\nPacO\r\n=d1/n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDCTflaVwNynKC9BIX4mWPXJC5tN3agLwHKjWYto+n7bAIgWyR6d8qJjvTKQBXreX0LFeXuUnAxgLRtrTDuAoUr55w="}]},"maintainers":[{"email":"beau@beausmith.com","name":"beausmith"},{"email":"ben@adida.net","name":"benadida"},{"email":"brian@donovans.cc","name":"eventualbuddha"},{"email":"brian@voting.works","name":"votingworks-owner"}],"_npmUser":{"name":"eventualbuddha","email":"brian@donovans.cc"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_1.4.1_1594065156408_0.9721756802215877"},"_hasShrinkwrap":false},"2.0.0":{"name":"@votingworks/ballot-encoder","version":"2.0.0","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}' --report-unused-disable-directives","prepare":"in-publish && tsc || not-in-publish","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"dependencies":{"@antongolub/iso8601":"^1.2.1","zod":"^1.7.1"},"devDependencies":{"@types/jest":"^24.0.18","@types/node":"^13.7.2","@types/random-js":"^1.0.31","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^3.3.0","@typescript-eslint/parser":"^3.3.0","@yarnpkg/pnpify":"^2.0.0-rc.18","eslint":"^7.2.0","eslint-config-prettier":"^6.3.0","eslint-plugin-jest":"^22.17.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.1","husky":"^4.2.3","in-publish":"^2.0.0","jest":"^25.1.0","jest-watch-typeahead":"^0.4.2","lint-staged":"^9.3.0","prettier":"^2.0.5","random-js":"^2.1.0","sort-package-json":"^1.22.1","ts-jest":"^25.2.1","typescript":"^3.9.5"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"_id":"@votingworks/ballot-encoder@2.0.0","dist":{"shasum":"89888cb34acf845c99f54c170ee276d0aa4d4109","integrity":"sha512-htqT7y8YWzfBE1L/uj9ViX62M50g6FjhffeD/yHYv7ggFcMMDK35jMQUNs1ML67lgGee7ZO/q7aqkUN3nFdt1Q==","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-2.0.0.tgz","fileCount":74,"unpackedSize":350114,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBP81CRA9TVsSAnZWagAAW1AQAJL6bZ4a6ZoiMZ/7elWO\nu0xL7OdnQK2OQXzQ3GjBKh8uShjcLbwt+9uSAgQ1uK6+PXfSGflCT63uRNdU\nK4FhuzgcABVl+GekZzU709HjuFkDWLNLK/pk/HG/n5po0pLMSk0R2JWKKvZH\n3zkOpCEwU2xSIDGizQMOB/ajfeOx+hz1kazZSgCVzutksl8JvjSETd70TRHV\nxr/Rv/eVPdIzoEbtcXGunZ5kUzSmQfTjSEIRYA6wPpJLmfv7Ily7ds3WFjQl\nvH6cOJvyg+FcfAQDVmEabu/eO+I+ULX4Y7fQT/+O1N0qDatZaHPKuVOHjWlV\nkd++JMdInwK63Ijow7oMKL4QQ44QYyN71kwpS+rHeGnTJgOMQYbwStcd2Ifm\nW290yw8sf5lwCXxe2O6GxWYcJWz+F9MO101h92EgZ8kER2ZUXo7BhatEHmMv\nvScfTLd16rfSuTkdooeL6cruZrXrTyJ87W5mBKFMOEWdXbZKS3A0RujZwEEm\nZ7/Wm/qxWoMH8BM1EkUPrXCKjdu2weoBXlciS3crDZ4ED1+Vlnz7OHB7eNCm\nQEt/I00n2eyeLdmo4TIfcLw405/7GxYR6tFVy4G/DVixTgVbKta1zHNvoPnG\nBQ5GYpQcF3W+hCWvM/lIetOTu3U8Itnc/z/Kzy2b3RPN3clFeToRDsawg/te\n2bwS\r\n=Q1hz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXirFRNtvojFauycBCl5nv8hcJ4sVP6hTHm7VkW1zrlAIhAIxDrQjrKRJqUzcZBH9HuvwacX6Zp9RbDChBDZ7JloJk"}]},"maintainers":[{"email":"beau@beausmith.com","name":"beausmith"},{"email":"ben@adida.net","name":"benadida"},{"email":"brian@donovans.cc","name":"eventualbuddha"},{"email":"brian@voting.works","name":"votingworks-owner"}],"_npmUser":{"name":"eventualbuddha","email":"brian@donovans.cc"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_2.0.0_1594162997060_0.6348500369220864"},"_hasShrinkwrap":false},"2.0.1":{"name":"@votingworks/ballot-encoder","version":"2.0.1","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}' --report-unused-disable-directives","prepare":"in-publish && tsc || not-in-publish","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"dependencies":{"@antongolub/iso8601":"^1.2.1","zod":"^1.7.1"},"devDependencies":{"@types/jest":"^24.0.18","@types/node":"^13.7.2","@types/random-js":"^1.0.31","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^3.3.0","@typescript-eslint/parser":"^3.3.0","@yarnpkg/pnpify":"^2.0.0-rc.18","eslint":"^7.2.0","eslint-config-prettier":"^6.3.0","eslint-plugin-jest":"^22.17.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.1","husky":"^4.2.3","in-publish":"^2.0.0","jest":"^25.1.0","jest-watch-typeahead":"^0.4.2","lint-staged":"^9.3.0","prettier":"^2.0.5","random-js":"^2.1.0","sort-package-json":"^1.22.1","ts-jest":"^25.2.1","typescript":"^3.9.5"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"_id":"@votingworks/ballot-encoder@2.0.1","dist":{"shasum":"e056043987b9ef45233b22b496a2133b4daf40e4","integrity":"sha512-qSNvWbspuoI+PMU1zK1LcImk2laOXT76rMSXUPFAMWi7XbcajzMU65fFHv/m8A9g130QxNzefS3pTXaaFwtkbQ==","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-2.0.1.tgz","fileCount":77,"unpackedSize":351151,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDz9zCRA9TVsSAnZWagAAtnkP/01XqATzq5RzjHj1TpNm\nGWlWKYMua+0MMNxowo0prsLOxw6qhvYv0RdLU9rCw4yJR2+LT7M1TsxIcThB\nwADaJev/HVctvP/X/g7B+OY18WcrgHnUxDU6F1dfBLRLdEcvu02frjIZ9hIi\nb9oTrQGvx4EHVFeDo7S3UyMAJ6SGDjSfqpKvppmf4ny/5MSd4GOK2T2kRaj6\nPrFfpVhy6zz37q0o5UdJ/kMNIAOVFvEEn7+pqVdaZ7gENBb8nTVXeG1sITeG\nE62XZx+dyauScLHigBdhrueFnfx6uJhLF0jKitOuLqiXcLPJG+SJ3eGlKZxI\nfg3mCDRcPaKD039dI/24vFKIvR0fjbNGjG+bACJy8/0pP2L4KGut+Bx4wwfC\nTM9rD+RFxNByZz2kQWKVsTncGTBvHMZmHgS7ONWgGo1v5m3P2wnpWjDdH/Li\nzfk214vLVD4L6RdmL/nt+dRw5MK86dAk+2wk4zodTGfZzSazPO3mVKfU6Y5j\nkPqGeojm+JXaYeLsygbiEA3dPXG35bp95rgQb7K4mf3fMUwCJIxarCZmIuzH\niN3CnUp3ZTrI/WWGXcrfzMKBFwEdgfKksn6V2Z5lsLaaC4Pde5INdW3k+0hB\nicKPRnQ06giqvOOX7AAr+tL43p16oYAaIGqMORE28/T1tTrPykOpyV3qBA7q\ncoC5\r\n=chJM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD04ePIkrNnQeyQZ/Z4RlsNb6SCM/pbPYqGcEjMNXWT+QIhALXo3aICUFP+tqOwpBCMe04BXVarUO46pbQmIfviJCLZ"}]},"maintainers":[{"email":"beau@beausmith.com","name":"beausmith"},{"email":"ben@adida.net","name":"benadida"},{"email":"brian@donovans.cc","name":"eventualbuddha"},{"email":"brian@voting.works","name":"votingworks-owner"}],"_npmUser":{"name":"eventualbuddha","email":"brian@donovans.cc"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_2.0.1_1594834803042_0.19268597529085696"},"_hasShrinkwrap":false},"2.1.0":{"name":"@votingworks/ballot-encoder","version":"2.1.0","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}' --report-unused-disable-directives","prepare":"in-publish && tsc || not-in-publish","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"dependencies":{"@antongolub/iso8601":"^1.2.1","zod":"^1.7.1"},"devDependencies":{"@types/jest":"^24.0.18","@types/node":"^13.7.2","@types/random-js":"^1.0.31","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^3.3.0","@typescript-eslint/parser":"^3.3.0","@yarnpkg/pnpify":"^2.0.0-rc.18","eslint":"^7.2.0","eslint-config-prettier":"^6.3.0","eslint-plugin-jest":"^22.17.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.1","husky":"^4.2.3","in-publish":"^2.0.0","jest":"^25.1.0","jest-watch-typeahead":"^0.4.2","lint-staged":"^9.3.0","prettier":"^2.0.5","random-js":"^2.1.0","sort-package-json":"^1.22.1","ts-jest":"^25.2.1","typescript":"^3.9.5"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"_id":"@votingworks/ballot-encoder@2.1.0","dist":{"shasum":"4fd7ca159d72f3ca70b59155f457d276f254eb1b","integrity":"sha512-n/Njkh98Q+B9ZqEOG8zzxiGjk10LPdiq8ezg4B0OEIPeOFvrnjm7JwtMlHsMkyIV2Rn9rkLbU2YhvpZeGHHz/g==","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-2.1.0.tgz","fileCount":5,"unpackedSize":183728,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMW2cCRA9TVsSAnZWagAAv74P/REkHuwfUbC/ZiDZ160L\nWTYOjsbAnxblVYOrAPNVD5u2Wp+HsCwfrNgbizJY39Xyohkfq+CekjOq6Lib\nuTSWZb1+jsua9caiU6KVrXvoZqt65lJvTqORw2NkCO2S/AG4G9B9rgoA/YZu\nxuwPYLGQKZrsdqxaIPmeVZp5o4GftCj/cwINlU0OQS1RTuRBMsd5kSxK75NL\nXhEkIm5CaHE587TUQ6Gx+3qDjf5eLl5aAGT9OI13fokwQXjvkCN5ISikKshS\nP042VxhFblS3NRqyahADGk006NGbWZregzWJDVHP6ORS5liSS6hzQ6HWseTu\nVNniCs8vBgmfUOTM5jBLDyIMxdsMVwN/8dtl0QkQxRro3q1y8MmziToEWFqB\nL/4F2n1EFXw2PWY0t7/+48/rMNV/dxLGvxPWd3qA1ZHCgYy46irI5fiycBfq\nmxQ93OB24ACafkmHC9BTv2dU3epykroSOCfoi1jqqt3sg9yQF5MSZBEmbwcZ\nRhd0aOIWQQqaEgfD1DxeT4RSeIzp/vmpdsUbSE3thjeOv2C91KrAm/8b3V1f\n8IVwgW6bIzX8nwNlKs7F1Ab1vLFaieoe2psliKSFZ4iFs3uk+uaD8X8O6wUu\nNYtj3bHqEjqgs62kEN4ourqsdprB8+Iqrb66hsN8m6btdZy++mN2koXnfsWM\nAnNP\r\n=p03g\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHv1DWrSANxN40Hx1PNfzw080CatvNd0ZbDuhpriryd3AiEAoVO2S3U3dXHs2Wa3ns09Y0Roh8KqJiWjQznzXQqdGGo="}]},"maintainers":[{"email":"beau@beausmith.com","name":"beausmith"},{"email":"ben@adida.net","name":"benadida"},{"email":"brian@donovans.cc","name":"eventualbuddha"},{"email":"brian@voting.works","name":"votingworks-owner"}],"_npmUser":{"name":"eventualbuddha","email":"brian@donovans.cc"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_2.1.0_1597074843708_0.008499962872532851"},"_hasShrinkwrap":false},"2.1.1":{"name":"@votingworks/ballot-encoder","version":"2.1.1","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}' --report-unused-disable-directives","prepare":"in-publish && tsc || not-in-publish","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"dependencies":{"@antongolub/iso8601":"^1.2.1","zod":"^1.7.1"},"devDependencies":{"@types/jest":"^24.0.18","@types/node":"^13.7.2","@types/random-js":"^1.0.31","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^3.3.0","@typescript-eslint/parser":"^3.3.0","@yarnpkg/pnpify":"^2.0.0-rc.18","eslint":"^7.2.0","eslint-config-prettier":"^6.3.0","eslint-plugin-jest":"^22.17.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.1","husky":"^4.2.3","in-publish":"^2.0.0","jest":"^25.1.0","jest-watch-typeahead":"^0.4.2","lint-staged":"^9.3.0","prettier":"^2.0.5","random-js":"^2.1.0","sort-package-json":"^1.22.1","ts-jest":"^25.2.1","typescript":"^3.9.5"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"_id":"@votingworks/ballot-encoder@2.1.1","dist":{"shasum":"84e3d47b20b8aaac4def6ca90e54f86844a8db0e","integrity":"sha512-6Vs51AxtkRQ+yynFqrTdie4QHxfylhJu4jivBFchpB87vGW0hIpv2huRUizm0F9ljIw9qBFxRIlveyrQ9M9mcg==","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-2.1.1.tgz","fileCount":77,"unpackedSize":356148,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMW3PCRA9TVsSAnZWagAALqwP/i5rA5wfzKmqZGfEigRE\n6JNHQTPFdobMnNsxZrjBBmLZ2E3cVUGTo8QznPGk2RLbH5zw1axq5S0F7t27\nty4duslYW0ShZpRhgQ/167CcIvT+ddcKDw0wNCZ9HXfLlaTRogzQbfVpiiAk\nfmHTKxQToWOFwVA72zPqwNYYUG2JYIHaRfcXo1EXm+mZHqDHJWdCb5qyc2US\nJPl6Bu1ibPcAH0pd8EQ07godFRwKVFh3FiIyMoDay2HpQI2PDsRncpT5YdtE\n8nABYWJfvPORsH/iz7eQd7ShfNNMiMF8+tSqGnWOsMR1brBDG3uBLHsXDwB/\nPlJoB8bsDABEzt3IaRLDeobceSzPtQnr/FRoj3ddP2a6FtHE1VYJ64oFW7/Z\nGbuRURCwBOI50PNlQ7tz8C7VwFb+IGi7NZhDT0POO1wjKu/hIGdCzOxghUyY\ny1vMN4gdshEe2Yh4wg40jcGs8P0mFJpf3IFXuw/HSochT2hv0QEn79pUn0GA\nCtNB46+s4lmGG1vgiDVdkjzFfeceLK3HoSj0L5sPNVuRyM0KIc+I4YDeWRlN\n/PG3ue3jKtMFpuyyDV19x6reTINmwJyY7/3p+rQaZh1UdUPijSIGa7qr7L8P\n+aU1Vl1mqmktqB9GPpxWXZSBw42sUYVtStP8LRiGZw7CUCr2GDxV85QcXMpd\n2JpH\r\n=pVUx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICJkwn4PyP3pOdv1ZJgNX9GFyGeVUxoPJi+BFztuFPPAAiEA3U/9s5KO6jwliyW32T5IVQVuGo/WdEe+XGwBc4ar7ho="}]},"maintainers":[{"email":"beau@beausmith.com","name":"beausmith"},{"email":"ben@adida.net","name":"benadida"},{"email":"brian@donovans.cc","name":"eventualbuddha"},{"email":"brian@voting.works","name":"votingworks-owner"}],"_npmUser":{"name":"eventualbuddha","email":"brian@donovans.cc"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_2.1.1_1597074895285_0.7859559608182032"},"_hasShrinkwrap":false},"2.2.0":{"name":"@votingworks/ballot-encoder","version":"2.2.0","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}' --report-unused-disable-directives","prepare":"in-publish && tsc || not-in-publish","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"dependencies":{"@antongolub/iso8601":"^1.2.1","zod":"^1.7.1"},"devDependencies":{"@types/jest":"^24.0.18","@types/node":"^13.7.2","@types/random-js":"^1.0.31","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^3.3.0","@typescript-eslint/parser":"^3.3.0","@yarnpkg/pnpify":"^2.0.0-rc.18","eslint":"^7.2.0","eslint-config-prettier":"^6.3.0","eslint-plugin-jest":"^22.17.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.1","husky":"^4.2.3","in-publish":"^2.0.0","jest":"^25.1.0","jest-watch-typeahead":"^0.4.2","lint-staged":"^9.3.0","prettier":"^2.0.5","random-js":"^2.1.0","sort-package-json":"^1.22.1","ts-jest":"^25.2.1","typescript":"^3.9.5"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"_id":"@votingworks/ballot-encoder@2.2.0","dist":{"shasum":"92400d3165e87538d324c678cd7d63be47a23fc3","integrity":"sha512-o0nxhQkbNXupGH8Mh3lfyugz33luhKPvmow1gfKcVzoSTJP7fw2/C/gmZnrSkqFiZisEsbW223FyUbgiaR7+UQ==","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-2.2.0.tgz","fileCount":77,"unpackedSize":356254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMaztCRA9TVsSAnZWagAATDUP/RVkhRGEVnjqVz2ztxfK\nczyODXgc+fdKIAX1bd8ZGdcAkFlzZXENcQOMvjb5GhSQBoMSXARt4a/X+mVA\nTCLstrMaqiNUbcLFvYxP7DZ6Upama7uqakXdxcEA7f8p6nXg0d4M0WItvEgK\npndoF3bUxt517sntpYrsPIF2/lmf2y0QA6nNgStzK2IUHScw10zpt4Fh78f6\n6fqz+goyzz8JiY/1089t/+PpfTaLx9iwD7E3tKr4IdQ9MjehyVHqKjK1U5Yp\n9RkEYLnom/VOZlAJ7FCdGUd7xATGoagJEGnQYm7Ps/mq4PDTDzv4g079+whQ\nthpyZb+g4lSUKpgDr69v6RFiW+ibiaJQUY2S9avJiJ68res3KXA19xDi98gU\nIwMFpFb9O8g2PRH7VYtGeQGowzR9K5HJopPp+9oRGbxHIf6mjVb/ISJOtlWG\nqwNJ6XY0A18zDjH35mRxM6EpKofV5zWx5IN71zefLRv5Kv6jQsDT6zB2OzFF\ndsTA9yUYFihXrBxZdRnITPUEWvqBNbx6fWGAY/ddkByjKl91CpDSshaJQNdl\nCRbUFsU+xk1xN0k/34SzanS5RB5+LkeNvZRG6qxlBRdQ+LaY53fbdxr32l3l\nz59W5DzLQ48kqZdQBeAqR15/kKIvA07KmPeZAlkz1nI8Yk/SxgIHzp/qUn3R\nBkkE\r\n=NgyH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpfqY8IOZdW+Yg+xcHCUtRfz5+QCyLLH8p2y0CCMJlDgIhANAFwHDktvAV/euhNpni4itamAh/O2CTVYo4ICb5Q8ZB"}]},"maintainers":[{"email":"beau@beausmith.com","name":"beausmith"},{"email":"ben@adida.net","name":"benadida"},{"email":"brian@donovans.cc","name":"eventualbuddha"},{"email":"brian@voting.works","name":"votingworks-owner"}],"_npmUser":{"name":"eventualbuddha","email":"brian@donovans.cc"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_2.2.0_1597091052692_0.04930934612688809"},"_hasShrinkwrap":false},"3.0.0":{"name":"@votingworks/ballot-encoder","version":"3.0.0","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}'","publish:npm":"yarn test:coverage && tsc && npm publish --access public && ts-emit-clean","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"dependencies":{"@antongolub/iso8601":"^1.2.1","zod":"^1.7.1"},"devDependencies":{"@types/jest":"^24.0.18","@types/node":"^13.7.2","@types/random-js":"^1.0.31","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^3.3.0","@typescript-eslint/parser":"^3.3.0","@yarnpkg/pnpify":"^2.0.0-rc.18","eslint":"^7.2.0","eslint-config-prettier":"^6.3.0","eslint-plugin-jest":"^22.17.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.1","husky":"^4.2.3","jest":"^25.1.0","jest-watch-typeahead":"^0.4.2","lint-staged":"^9.3.0","prettier":"^2.0.5","random-js":"^2.1.0","sort-package-json":"^1.22.1","ts-emit-clean":"^1.0.0","ts-jest":"^25.2.1","typescript":"^3.9.5"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"gitHead":"7dadbb1f896bee66eb5bff40638fb3fc615d38bb","description":"Provides encoding and decoding services for completed ballots.","_id":"@votingworks/ballot-encoder@3.0.0","_nodeVersion":"12.10.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-IK8wkd0uT6XSjlakvYOthzbEC701ycVU0C050nudNL3+TTCCa6Xtz2x69xOXVedCn0fCo2vrJ5c8OveoFqeFPg==","shasum":"c82ce28b184ff3828d393b11928517021a6ce855","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-3.0.0.tgz","fileCount":80,"unpackedSize":403624,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRUukCRA9TVsSAnZWagAAdHkP/R0YVap7g7ZXKSUjSj6+\nVODERC26Gdu25irnTE3BJX5sWqzzmZFPwLFAkfcYyqnkEQtrGmfrvrtpPnkw\nrHt05Qh1YUv3GQn35DAgW6BclLTVwhRhNWf8SZxuVgfAgXK8moNYfDkSe4Hy\nznC7uyKw/7miX8WPugPyCkJ6jNdnyAfGMnTAjzAtl5hIah+RnYOBlnQEwJWs\n4Vvt/sa+wcFagLLtR6eyXEYlPA+vM776h0J+3OkVLZFC+6dU9UhHA8yONAzg\ny6K54apFFqpjht0NaUKR36kyg29BgOBHwr6WdGXo+Jp/VYJ2z0TzNW7VZy0r\nQyEvLhreczL7upj8UQkAysKj6AzL4cI3ylF6z9z+sbdFX0B+DoKo7zAEOh38\nlMhtg6KWeIt4V8YiHGWLkVrEgmjIMYFtTUecnqWY1KxzwGCoFvZ4uPwDsfFW\ntDP/lloJZcSqJLi1OvX6OYWRj6rl73fKLZIfQ25Wl0CLIyXNreVXseQ2biu3\nzJH+jsCEJjdVHZ7/m2HHg0WiKmBbOAocL1wkGp9q98VEM8bDF4tWVGtBtUd6\nsRv2MABstX4sbUOC0JTArpDlS522xGqFUeuwj77TuoCWUMVc9BPzRHZyQ9Nt\npuzYbg630X4ZpY0KDytuhYFHegHpSH0NbuN7fCAaNOVWOKcYIDUSPYnLl5qU\n8fnd\r\n=ru2w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC47jMenSYRJfac1/toFpNJeRzUkYnhd6Gz2bqVAMxLZAiAuVVhN1gV28y3+EuoUz7X3EqNVQQthFQy9KFW8txfV1Q=="}]},"maintainers":[{"email":"beau@beausmith.com","name":"beausmith"},{"email":"ben@adida.net","name":"benadida"},{"email":"brian@donovans.cc","name":"eventualbuddha"},{"email":"brian@voting.works","name":"votingworks-owner"}],"_npmUser":{"name":"eventualbuddha","email":"brian@donovans.cc"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_3.0.0_1598376868174_0.12062880559827893"},"_hasShrinkwrap":false},"3.1.0":{"name":"@votingworks/ballot-encoder","version":"3.1.0","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}'","publish:npm":"yarn test:coverage && tsc && npm publish --access public && ts-emit-clean","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"dependencies":{"@antongolub/iso8601":"^1.2.1","zod":"^1.7.1"},"devDependencies":{"@types/jest":"^24.0.18","@types/node":"^13.7.2","@types/random-js":"^1.0.31","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^3.3.0","@typescript-eslint/parser":"^3.3.0","@yarnpkg/pnpify":"^2.0.0-rc.18","eslint":"^7.2.0","eslint-config-prettier":"^6.3.0","eslint-plugin-jest":"^22.17.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.1","husky":"^4.2.3","jest":"^25.1.0","jest-watch-typeahead":"^0.4.2","lint-staged":"^9.3.0","prettier":"^2.0.5","random-js":"^2.1.0","sort-package-json":"^1.22.1","ts-emit-clean":"^1.0.0","ts-jest":"^25.2.1","typescript":"^3.9.5"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"_id":"@votingworks/ballot-encoder@3.1.0","dist":{"shasum":"707ef50fed49a52f23b8b2294999d0488dc1f2e2","integrity":"sha512-uCoV/wO00VEz/6sS+44ChyBHVi9ujoGP2JYmD4V4Pj2KMSDi3rZJ30Q2KOsnUx3OfcyxRsFA28TXDZt2Rgesaw==","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-3.1.0.tgz","fileCount":78,"unpackedSize":400489,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTIV+CRA9TVsSAnZWagAA9cUP/io+hSrz0hDiu3Scb9em\nlEr/IJUmwEJTHYJXBppq+dYOlKFyE+0cilwMGNv1H2sLTuyTo2Ir/QDVnnfB\nIbmfs6S5ot9mJ/iePvQSdsiD2u5aEA4FvCwuMqyW3wPmL55ERLi9IFfstee6\nkGbez3VGSBmc6UtvjaZ1pCEbeegeTPymYNCJX4ey4diR//yWX9+8DO9BNqY8\nwBvjO3aZe1LXuPAXVpDrzowmtnzxZNyDGczG4nQRUgkpbRRr1zg4eu7xYTcu\newZyBuQy+AMmQht2cQ7nSmG02COdcJKv9twkiuKpaM/Va4TxQwqzThfo83mg\nDxxF+cvQ7fs6Zh/BfeEeexuHMAzrTC+JfYq2iyVDxVBtty47Rz9zumg7J881\nDrdqxUxJVUAwbR/aP+VoExvdNgNtauQ/+GcDk70imdJQzn2YTHsAoQ1yeZ6q\nUYBIKw8ipCzH6lLkJf/DMTs3vihWBAdsVNznVtdXVThpCxlXMINPVN1UMYAq\n1uzes8JAxFMepMf2PCwz/SNDhxsPVCFaYjm3BbrOrP08791Nk/ShNmEfXoK+\naydUAE9iEvJnRsjnpJnLEWlN3ca7TpHpSIcyZKPfkhwGY6P3iOYpiuFhCLCD\nHknHKafN6RGioS1tFIV45sxu8U2TDvd5+vd5s+nC30PSePzYHF0sMAV6SWrQ\nQTYi\r\n=9LK2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF0+vDEOYSqBZpdmE+Z8Jg7cY1CT4Cf0VizKnAyi7+O0AiAeLpZWiyIYhg/owEvarE6ZVr0MLHPbgL4bQvUOkwd55g=="}]},"maintainers":[{"email":"beau@beausmith.com","name":"beausmith"},{"email":"ben@adida.net","name":"benadida"},{"email":"brian@donovans.cc","name":"eventualbuddha"},{"email":"brian@voting.works","name":"votingworks-owner"}],"_npmUser":{"name":"eventualbuddha","email":"brian@donovans.cc"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_3.1.0_1598850429416_0.8500740180193533"},"_hasShrinkwrap":false},"4.0.0":{"name":"@votingworks/ballot-encoder","version":"4.0.0","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}'","publish:npm":"yarn test:coverage && tsc && npm publish --access public && ts-emit-clean","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"dependencies":{"@antongolub/iso8601":"^1.2.1","zod":"^1.7.1"},"devDependencies":{"@types/jest":"^24.0.18","@types/node":"^13.7.2","@types/random-js":"^1.0.31","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^3.3.0","@typescript-eslint/parser":"^3.3.0","@yarnpkg/pnpify":"^2.0.0-rc.18","eslint":"^7.2.0","eslint-config-prettier":"^6.3.0","eslint-plugin-jest":"^22.17.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.1","husky":"^4.2.3","jest":"^25.1.0","jest-watch-typeahead":"^0.4.2","lint-staged":"^9.3.0","prettier":"^2.0.5","random-js":"^2.1.0","sort-package-json":"^1.22.1","ts-emit-clean":"^1.0.0","ts-jest":"^25.2.1","typescript":"^3.9.5"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"_id":"@votingworks/ballot-encoder@4.0.0","dist":{"shasum":"f87152e962110e56c37985547e702f39bc8639f8","integrity":"sha512-sC3m6J6MuUgvb5qq5avppaimCKX0wLFkoFakH1B1MM8F91Sx3Jq5GqvkNuDgs8iRPgTOAJS83ayKxSCPsq9NeA==","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-4.0.0.tgz","fileCount":78,"unpackedSize":403434,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfTVLFCRA9TVsSAnZWagAAWr0QAKIoKp8UqY19Tbg6bRcW\nI8RgopDL+sPYcJ+5sIAwwAhK5+W1xXWUWR0G9cFI9/ZSodE3ORwQFOouy7WI\n769TETCkmozkZUDHkFqNoqe6DYP9UyiFOFtzR+E0AXszgkbjG7uZ0wGAAUYn\n9eEuYes2KjILAaHPa1b5/qXxf6d24aVznSCEfW36iZBGHe/GfdxJA0qAAdKw\nkKbITX5KZl+TEHZQqmZKbTKv94hKxD5OjaCfX/6B3kyPDvFAYhbWHBOQAFbf\nWFbGNWy01Efzs5GCXoIClU30P/pT77nJGxPG9RQ4yKDNWg+JUwWKyY1AyAPl\nXe7KsxdLhezikoNeFVX63NdbtaHoslaJvRU8etQnXqUs8+Xm1yYB4EZkTwG2\ns0TheK6aIbJCsgE1KaAb8leejEspasa65+7cO3ZxW+FGVG0vNz5n9TK5V5NJ\nZ93hdTxtMUqzOTfuN62bdnl8EnbO8UGorLEf2BJzsWh+yqE6JHUoretgc3dG\najBGrcV9QpQNy4D362fU9Wn87Cy1b4i6hp407n4R8wMqw1SwZ0kdKRRB1/JK\n5nFw9e6KZDs9bpyGFl7Xe4YKX6ZGzl5DZf7bUyulmFV9qUx/a1LC4jZnvysn\npwVO6l1qU9RYUkx1D9Z2api8l0bEvGIjsh+QS2shfDEMDk+6wqx6APxFmKY0\nXusB\r\n=NWwC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDUEjspuW4EnC6D+ei/pXDMI9s0YAExKxZ2QSOSeWCrpgIhANY05BOZH679EFK01Z+HYdva4RvzvG4cI/8e13CgewOm"}]},"maintainers":[{"email":"beau@beausmith.com","name":"beausmith"},{"email":"ben@adida.net","name":"benadida"},{"email":"brian@donovans.cc","name":"eventualbuddha"},{"email":"brian@voting.works","name":"votingworks-owner"}],"_npmUser":{"name":"eventualbuddha","email":"brian@donovans.cc"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_4.0.0_1598902980910_0.4464721368351392"},"_hasShrinkwrap":false},"5.0.0":{"name":"@votingworks/ballot-encoder","version":"5.0.0","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}'","publish:npm":"yarn test:coverage && tsc && npm publish --access public && ts-emit-clean","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"dependencies":{"@antongolub/iso8601":"^1.2.1","zod":"^1.7.1"},"devDependencies":{"@types/jest":"^24.0.18","@types/node":"^13.7.2","@types/random-js":"^1.0.31","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^3.3.0","@typescript-eslint/parser":"^3.3.0","@yarnpkg/pnpify":"^2.0.0-rc.18","eslint":"^7.2.0","eslint-config-prettier":"^6.3.0","eslint-plugin-jest":"^22.17.0","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.1","husky":"^4.2.3","jest":"^25.1.0","jest-watch-typeahead":"^0.4.2","lint-staged":"^9.3.0","prettier":"^2.0.5","random-js":"^2.1.0","sort-package-json":"^1.22.1","ts-emit-clean":"^1.0.0","ts-jest":"^25.2.1","typescript":"^3.9.5"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"gitHead":"88278b1581efb1effc558684769b7e9711d54fe8","description":"Provides encoding and decoding services for completed ballots.","_id":"@votingworks/ballot-encoder@5.0.0","_nodeVersion":"12.10.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-7g6hPoO9YziUoP8fhL2A7zqX23+bNxcDO8vfnalg5dh3dorrSEv8UkwtVTrmrdC09eJ5L/LMEGke8/XKkeC/AA==","shasum":"0af21b7b7f0d4f4a43be6e225b16aae6c060371f","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-5.0.0.tgz","fileCount":80,"unpackedSize":418029,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJff0K6CRA9TVsSAnZWagAA1dsP/j40lyjRmL38SeQllHFv\nUpEOwfji/6ndF+XwbvQkKSOE97ya9Td+V4DeqQafXyZagWkTMQn3DFI8Hqz+\n4A3ogc9HB6ZBN1lQ9pvyqydQJhHjEqiDbjg3Um0LCPJHeEo1FUoKryScyKZk\nXdpZSQVGgCZXTBalut9n4GULzAo12wyRqr+jinMGz08ig8/NiUUJqPZNOHqj\nEugaK0PAwt4m8htFWprQIjaIdEuo/dzUCTExAkFNZOn49YTolhau4wpRzxFY\nvF+h8Dk5L2O88vHF8XeK/5jROY6U5dmnvlk5owcE53zAhMPt7Zwjhr4cyNo1\n3rHvHOHlntRFH4ccQe/RJvEN48Pkkoskwrdl1LrO1KT84fJHUYv2CknzUOLm\nbaSkAmZYV6+Mw5JytfjY6xxWEBqGm56QvYHTPHAJZUhTu9RB2+O1b668PhQ9\nGn0eTkik8eqOTGEMgMu0BBh74W1bU1kg9CzNKqoDwPrK6pxSM33HouaZDf6z\n7OLQP7xcSF4kg8fvRszHz5PxrRpOSBdxFkk4oJRvNBppTk+jt63ycbGIWcCK\nt+8gjoRzWrgQW3HT1JC6vknntOpUtOoByaZmIQbv5Nf/ie0pa6URixDaNRus\nkdUAlvebrDdVLAqxkdVi5u0xz97HvH1kRhfDBjw3rKzuqPpzZSQViT9CzXCA\nuvT2\r\n=DKfP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAn/syjOcqcepngXkvzLq0HuYry77c6OtQw7qKgmItr1AiBlkFvGW5zBdr/GQ8NCLrNjlYhQlmfs/nxNJF5+FEAadA=="}]},"maintainers":[{"name":"beausmith","email":"beau@beausmith.com"},{"name":"benadida","email":"ben@adida.net"},{"name":"eventualbuddha","email":"brian@donovans.cc"},{"name":"votingworks-owner","email":"brian@voting.works"}],"_npmUser":{"name":"eventualbuddha","email":"brian@donovans.cc"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_5.0.0_1602175673831_0.9242911573609789"},"_hasShrinkwrap":false},"5.1.0":{"name":"@votingworks/ballot-encoder","version":"5.1.0","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}'","publish:npm":"yarn test:coverage && tsc && npm publish --access public && ts-emit-clean","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"dependencies":{"@antongolub/iso8601":"^1.2.1","js-sha256":"^0.9.0","zod":"1.7.1"},"devDependencies":{"@types/jest":"^26.0.15","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^4.6.1","@typescript-eslint/parser":"^4.6.1","eslint":"^7.12.1","eslint-config-prettier":"^6.15.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-no-array-sort-mutation":"../eslint-plugin-no-array-sort-mutation","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.4","husky":"^4.3.0","jest":"^26.6.2","jest-watch-typeahead":"^0.6.1","lint-staged":"^10.5.1","prettier":"^2.1.2","random-js":"^2.1.0","sort-package-json":"^1.46.1","ts-emit-clean":"^1.0.0","ts-jest":"^26.4.3","typescript":"^4.0.5"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"description":"Provides encoding and decoding services for completed ballots.","_id":"@votingworks/ballot-encoder@5.1.0","_nodeVersion":"14.15.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-q/i8irtG0P5XZaBnnKh3hdoPWyF31vfEMuRhPDQW13uunmTEKYjh1/zKaLDHV3Ey1n//nmP0yZ0rvCx4FcnAfQ==","shasum":"1c58cf0c3ce2439f73ab16cd72aad209fb3f2aa6","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-5.1.0.tgz","fileCount":8,"unpackedSize":211956,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrdBoCRA9TVsSAnZWagAA+/kQAJOmfM87J9BIWoY9tzRj\nNQR2K/T7X+WuSWyp3a1u8IjIKMTdz2TKfIKwr1DYUvd1ibq6PMZaRggOt9XS\nAsNojygaVkhL2cc2Wz3RR4fZxKvXqsHoeGg6OOZH1Vfta2PdVG6a5CVvN8T7\nuPPcFOa7phdUbgERsKID/7S+fbqnfnbDU1Y33jAIKhoLdQcDrYPkVKWUhSOG\nz5vxaP+h//Ia4H6rkItMpS8icWVmn4IDkbKaJVXZ6hYrDXfJbicSkHq9FyXD\nJYJ7VvRSjYZXhUTQdKXDMeE9gWovZkn9hogexRbZUvT/t6/oMwcbTKuNa1vV\nbe3D3nXPRE1ZS5mF0bTyoBCXKa/MM1AWIWaC1FSRZ+zUVvq8fEhUIzmh+ZFK\nGzEsRcLFCmjUm659vNmQxGB5we4n5LceOSuJqg3rdfKaCXvj/N+bNkuhEb0Y\nI1E8ZT9k0No/EPjrdw9VpYt3xfd231NiK7sqfJYDUde2DQyPoO/LAtALvyJ8\nmJ3casg04VY48Q0ue2kIfPeFM6Mv3dwNR/jmKwGn9xf3i0yI1o4EnIopDh6Y\nRw5Zg9XCRiCVODMjBeOV/DTGXjnnWz9NYh4dOxZs4nHQJLlPe1jGR3NliUJl\nViPIunegwxF480n0B8S15LWIZW7ekX5Iy5M8/lAf4vSiMi9Kou1H5EBywupv\nQb7w\r\n=J3cB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFbdAZxBEKdO0WHsxOSuZL32cUJwcgVSFAh3wVqqWtHHAiA6xgA7T5fVqE4pC0ZyZZ18wblF1blLKzNUfHDNvl6D7Q=="}]},"_npmUser":{"name":"cmodic","email":"caroline.modic@gmail.com"},"directories":{},"maintainers":[{"name":"cmodic","email":"caroline.modic@gmail.com"},{"name":"beausmith","email":"beau@beausmith.com"},{"name":"benadida","email":"ben@adida.net"},{"name":"eventualbuddha","email":"brian@donovans.cc"},{"name":"votingworks-owner","email":"brian@voting.works"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_5.1.0_1605226600149_0.40691231886979407"},"_hasShrinkwrap":false,"deprecated":"broken version"},"5.1.0-beta.0":{"name":"@votingworks/ballot-encoder","version":"5.1.0-beta.0","main":"index.js","types":"index.d.ts","scripts":{"lint":"eslint '**/*.{ts,js}'","publish:npm":"yarn test:coverage && tsc && npm publish --access public && ts-emit-clean","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"dependencies":{"@antongolub/iso8601":"^1.2.1","js-sha256":"^0.9.0","zod":"1.7.1"},"devDependencies":{"@types/jest":"^26.0.15","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^4.6.1","@typescript-eslint/parser":"^4.6.1","eslint":"^7.12.1","eslint-config-prettier":"^6.15.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-no-array-sort-mutation":"../eslint-plugin-no-array-sort-mutation","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.4","husky":"^4.3.0","jest":"^26.6.2","jest-watch-typeahead":"^0.6.1","lint-staged":"^10.5.1","prettier":"^2.1.2","random-js":"^2.1.0","sort-package-json":"^1.46.1","ts-emit-clean":"^1.0.0","ts-jest":"^26.4.3","typescript":"^4.0.5"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"readme":"# Ballot Encoder\n\nProvides encoding and decoding services for completed ballots.\n\n## Dev Install\n\nTo use within VS Code:\n\n```\nyarn install\nyarn pnpify --sdk\n```\n\n## Developing Alongside another Project\n\nIn dev `ballot-encoder` dir, run `yarn tsc` to generate JavaScript files.\n\nIn the PROJECT you wish to use this dev version of `ballot-encoder`:\n\n1. `cd path/to/PROJECT/node_modules/@votingworks`\n2. `rm -rf ballot-encoder`\n3. `ln -s path/to/ballot-encoder ballot-encoder`\n4. restart project server if applicable\n\n## Pubishing New NPM Version\n\n1. Update the version and create a git tag: `npm version [major|minor|patch]`\n2. Push branch for PR review. Once approved…\n3. Generate the JavaScript files from TypeScript: `yarn prepare` (or `yarn tsc`)\n4. Publish current version: `yarn npm publish --access=public`\n\nOptionally, deprecate a previous version. For example:\n`npm deprecate -f '@votingworks/ballot-encoder@1.3.1' \"Poor translations\"`\n\n## Example\n\n```ts\nimport {\n  CompletedBallot,\n  decodeBallot,\n  electionSample as election,\n  encodeBallot,\n  getContests,\n  vote,\n} from '@votingworks/ballot-encoder'\n\nconst ballotStyle = election.ballotStyles[0]\nconst precinct = election.precincts[0]\nconst ballotId = 'abcde'\nconst contests = getContests({ ballotStyle, election })\nconst votes = vote(contests, {\n  'judicial-robert-demergue': 'yes',\n  'judicial-elmer-hull': 'yes',\n  'question-a': 'yes',\n  'question-b': 'no',\n  'question-c': 'yes',\n  'proposition-1': 'yes',\n  'measure-101': 'no',\n  '102': 'yes',\n})\nconst ballot: CompletedBallot = {\n  ballotId,\n  ballotStyle,\n  precinct,\n  votes,\n}\n\nconsole.log(encodeBallot(ballot))\n/*\nUint8Array [\n  86, 88,  1,  2,  49,  50,  2,\n  50, 51,  0, 15, 254, 208, 86,\n  22, 38, 54, 70,  80\n]\n*/\n\nconsole.log(decodeBallot(election, encodeBallot(ballot)).ballot.votes)\n/*\n{\n  '102': 'yes',\n  'judicial-robert-demergue': 'yes',\n  'judicial-elmer-hull': 'yes',\n  'question-a': 'yes',\n  'question-b': 'no',\n  'question-c': 'yes',\n  'proposition-1': 'yes',\n  'measure-101': 'no'\n}\n*/\n```\n\n## Usage\n\nTo encode a ballot, simply pass an election and a completed ballot object to\n`encodeBallot`. You'll get back a buffer that may be stored or transmitted and\nlater passed to `decodeBallot` with the same `election` data given to\n`encodeBallot`.\n\nThere are multiple encoder versions and by default the latest will be used when\nencoding. To specify the version, pass the `EncoderVersion` as the second\nparameter to `encodeBallot`:\n\n```ts\nimport { encodeBallot, EncoderVersion } from '@votingworks/ballot-encoder'\n\nconst encodedBallot = encodeBallot(ballot, EncoderVersion.v1)\n```\n\nWhen decoding, you may pass an `EncoderVersion` or you may allow `decodeBallot`\nto detect the encoder version:\n\n```ts\nimport { decodeBallot, EncoderVersion } from '@votingworks/ballot-encoder'\n\n// automatically detect version\nconst result = decodeBallot(election, encodedBallot)\nconsole.log('Ballot version:', result.version)\nconsole.log('Ballot:', result.ballot)\n\n// specify version\nconst result = decodeBallot(election, encodedBallot, EncoderVersion.v0)\nconsole.log('Ballot version:', result.version)\nconsole.log('Ballot:', result.ballot)\n```\n\nIf you only want to detect the version, you can simply use `detect`:\n\n```ts\nimport { detect } from '@votingworks/ballot-encoder'\n\nconst version = detect(encodedBallot)\nconsole.log('Ballot version:', version)\n```\n\n## Publish\n\nThis project uses the\n[Angular Commit Message Format convention](https://gist.github.com/brianclements/841ea7bffdb01346392c).\nHow to publish a new version:\n\n1. Determine what the appropriate version bump is (i.e. patch, minor, or major).\n   Let's assume this is stored in the environment variable `BUMP`.\n2. Create a branch for publishing the new version.\n3. Bump the version: `npm version $BUMP`.\n4. Publish the package to NPM: `yarn publish:npm`.\n5. Push the branch and the new tag:\n   `git push -u origin HEAD && git push --tags`.\n6. Create a pull request for your newly pushed branch. Note that this pull\n   request should only have the version bump commit, nothing else.\n7. Get the pull request approved and merged.\n","readmeFilename":"README.md","description":"Provides encoding and decoding services for completed ballots.","_id":"@votingworks/ballot-encoder@5.1.0-beta.0","_nodeVersion":"14.15.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ebXEOA4lWcJqtbIpr4LgreqA10D09Rfu3K9gKhjlNajVSu1kw9JEj81JP45Kotrh+UNLb/avYclSI9f6Ll6GzA==","shasum":"3da71d66b5d5fb7d41c30365b719b957ef55604c","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-5.1.0-beta.0.tgz","fileCount":16,"unpackedSize":241235,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrrnaCRA9TVsSAnZWagAAsLoP/0/xX4zpKp8JwgdpyfSn\nivWOahFQr93efjTZBqTd69PTFFS38pspWH/puWecj8JFpugT605UJ7MQdabV\nucTnyeqW9E5f8geSv50iGuYleHdsLnJtc/zfk29tB7X6QzWqnMU5r7EJ8gTF\n3/ODePWBfESkB9Y1g8RTMCM9ckYlSYPFMNSgGHwEQ6rBDaO37ON/yR5PhCjx\nBy7bw28DjUTmUqRwBCfMPvG9xvv8FtO8qG6FsnDjNlgTDAtdI0OLSbjvR+Mo\naoZigG8UD5+yP54vAGfp/bakkAui4ruxiPGsrEt+ACbQOGa0ndzQxd3ALLLt\nXV1dKGGnhK3L6weu0jXuBOmcXJiqdcHtvmR5mFbRb2wfyANNktouuTu/M+m7\nkCwgdJitlH45/tl4C8hXP/5I2eF0cAfQ83UEzckGDS7El7AJ/PpolxY5Dw4a\nDO4IZGds5H1H6Y73ZcSnRtZfAyOW4kB1SUof9z4qXQKc/zZspiLwKPUcp82q\nIb1z7dXybMveMeU0oLCxcgL7H9FbE6RN/0se6QZw3TgG36laJg0Ca0XyTVig\nJZtwrDrzDHtgJMrdr1LMm+u78b6zDoAnkuL2nMwqwoDLonvA1kSn20Mq7X9o\nwaMhCub7Ykk2BHwqirDdRt1HSAfJEbmlq+lo0fE/CY6lb+KDtg8b+kg3+YrQ\nbYl7\r\n=m0FZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLT9mTSUTvgB18eYN9lJ1Se3q6ID1HTfzJ2x8tTaaV8AIgHIEmAz9kgX173WQgfZiAIOOdkcJLXaPJ9SS8GOatGg8="}]},"_npmUser":{"name":"cmodic","email":"caroline.modic@gmail.com"},"directories":{},"maintainers":[{"name":"cmodic","email":"caroline.modic@gmail.com"},{"name":"beausmith","email":"beau@beausmith.com"},{"name":"benadida","email":"ben@adida.net"},{"name":"eventualbuddha","email":"brian@donovans.cc"},{"name":"votingworks-owner","email":"brian@voting.works"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_5.1.0-beta.0_1605286362051_0.6639109048819085"},"_hasShrinkwrap":false},"5.1.0-beta.1":{"name":"@votingworks/ballot-encoder","version":"5.1.0-beta.1","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}'","publish:npm":"yarn test:coverage && tsc && npm publish --access public --tag beta && ts-emit-clean","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"dependencies":{"@antongolub/iso8601":"^1.2.1","js-sha256":"^0.9.0","zod":"1.7.1"},"devDependencies":{"@types/jest":"^26.0.15","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^4.6.1","@typescript-eslint/parser":"^4.6.1","eslint":"^7.12.1","eslint-config-prettier":"^6.15.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-no-array-sort-mutation":"../eslint-plugin-no-array-sort-mutation","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.4","husky":"^4.3.0","jest":"^26.6.2","jest-watch-typeahead":"^0.6.1","lint-staged":"^10.5.1","prettier":"^2.1.2","random-js":"^2.1.0","sort-package-json":"^1.46.1","ts-emit-clean":"^1.0.0","ts-jest":"^26.4.3","typescript":"^4.0.5"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"readme":"# Ballot Encoder\n\nProvides encoding and decoding services for completed ballots.\n\n## Dev Install\n\nTo use within VS Code:\n\n```\nyarn install\nyarn pnpify --sdk\n```\n\n## Developing Alongside another Project\n\nIn dev `ballot-encoder` dir, run `yarn tsc` to generate JavaScript files.\n\nIn the PROJECT you wish to use this dev version of `ballot-encoder`:\n\n1. `cd path/to/PROJECT/node_modules/@votingworks`\n2. `rm -rf ballot-encoder`\n3. `ln -s path/to/ballot-encoder ballot-encoder`\n4. restart project server if applicable\n\n## Pubishing New NPM Version\n\n1. Update the version and create a git tag: `npm version [major|minor|patch]`\n2. Push branch for PR review. Once approved…\n3. Generate the JavaScript files from TypeScript: `yarn prepare` (or `yarn tsc`)\n4. Publish current version: `yarn npm publish --access=public`\n\nOptionally, deprecate a previous version. For example:\n`npm deprecate -f '@votingworks/ballot-encoder@1.3.1' \"Poor translations\"`\n\n## Example\n\n```ts\nimport {\n  CompletedBallot,\n  decodeBallot,\n  electionSample as election,\n  encodeBallot,\n  getContests,\n  vote,\n} from '@votingworks/ballot-encoder'\n\nconst ballotStyle = election.ballotStyles[0]\nconst precinct = election.precincts[0]\nconst ballotId = 'abcde'\nconst contests = getContests({ ballotStyle, election })\nconst votes = vote(contests, {\n  'judicial-robert-demergue': 'yes',\n  'judicial-elmer-hull': 'yes',\n  'question-a': 'yes',\n  'question-b': 'no',\n  'question-c': 'yes',\n  'proposition-1': 'yes',\n  'measure-101': 'no',\n  '102': 'yes',\n})\nconst ballot: CompletedBallot = {\n  ballotId,\n  ballotStyle,\n  precinct,\n  votes,\n}\n\nconsole.log(encodeBallot(ballot))\n/*\nUint8Array [\n  86, 88,  1,  2,  49,  50,  2,\n  50, 51,  0, 15, 254, 208, 86,\n  22, 38, 54, 70,  80\n]\n*/\n\nconsole.log(decodeBallot(election, encodeBallot(ballot)).ballot.votes)\n/*\n{\n  '102': 'yes',\n  'judicial-robert-demergue': 'yes',\n  'judicial-elmer-hull': 'yes',\n  'question-a': 'yes',\n  'question-b': 'no',\n  'question-c': 'yes',\n  'proposition-1': 'yes',\n  'measure-101': 'no'\n}\n*/\n```\n\n## Usage\n\nTo encode a ballot, simply pass an election and a completed ballot object to\n`encodeBallot`. You'll get back a buffer that may be stored or transmitted and\nlater passed to `decodeBallot` with the same `election` data given to\n`encodeBallot`.\n\nThere are multiple encoder versions and by default the latest will be used when\nencoding. To specify the version, pass the `EncoderVersion` as the second\nparameter to `encodeBallot`:\n\n```ts\nimport { encodeBallot, EncoderVersion } from '@votingworks/ballot-encoder'\n\nconst encodedBallot = encodeBallot(ballot, EncoderVersion.v1)\n```\n\nWhen decoding, you may pass an `EncoderVersion` or you may allow `decodeBallot`\nto detect the encoder version:\n\n```ts\nimport { decodeBallot, EncoderVersion } from '@votingworks/ballot-encoder'\n\n// automatically detect version\nconst result = decodeBallot(election, encodedBallot)\nconsole.log('Ballot version:', result.version)\nconsole.log('Ballot:', result.ballot)\n\n// specify version\nconst result = decodeBallot(election, encodedBallot, EncoderVersion.v0)\nconsole.log('Ballot version:', result.version)\nconsole.log('Ballot:', result.ballot)\n```\n\nIf you only want to detect the version, you can simply use `detect`:\n\n```ts\nimport { detect } from '@votingworks/ballot-encoder'\n\nconst version = detect(encodedBallot)\nconsole.log('Ballot version:', version)\n```\n\n## Publish\n\nThis project uses the\n[Angular Commit Message Format convention](https://gist.github.com/brianclements/841ea7bffdb01346392c).\nHow to publish a new version:\n\n1. Determine what the appropriate version bump is (i.e. patch, minor, or major).\n   Let's assume this is stored in the environment variable `BUMP`.\n2. Create a branch for publishing the new version.\n3. Bump the version: `npm version $BUMP`.\n4. Publish the package to NPM: `yarn publish:npm`.\n5. Push the branch and the new tag:\n   `git push -u origin HEAD && git push --tags`.\n6. Create a pull request for your newly pushed branch. Note that this pull\n   request should only have the version bump commit, nothing else.\n7. Get the pull request approved and merged.\n","readmeFilename":"README.md","description":"Provides encoding and decoding services for completed ballots.","_id":"@votingworks/ballot-encoder@5.1.0-beta.1","_nodeVersion":"14.15.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-fKddpcxI5wbMPt0DvmcVXwy4IBmcML7QX9Z86wNZAs7L6ox/d0l9W40R0rbWGnkGW+uROURMssSQTw73ybMUKQ==","shasum":"95e7fa7a0679f26359e88033eefa7c3ab7154379","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-5.1.0-beta.1.tgz","fileCount":80,"unpackedSize":419497,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrsjBCRA9TVsSAnZWagAAGdQP/1KjfHXVMQrG5cs295NA\nEw7m/jjAlFyzH1Oa3qqG+hL0+Q1FZ2aJ6bGsnV3JGKuQbRAnGcPERcpWrfsA\nWuu9bfrV5hdAg98PS3FkyiEMvWqVTXc8chBg6pLYWYwKLx9fwhxSt9iVrnWR\nBr4EJ71FPw82b1nhxiH3Hhnr6qNVpV7j8lAacKe1/URO2SYJpVhzzsjBsUGB\nfiAAlF76nCJlHOkNHCUQIcQKUywTjzt9JG9zFJ5J2R2/xaNeQRDKrSPRDlYF\nck7c5mbbQw+6yAaGkwXwjf4Hn9LqQMYuZkkHcpiiWuh8F8mpZlpOFpkrg2xM\nQH1DiY7HREp5r0iQ+5KRXzbVYW0sawncb2Z37tjX1D03oTDzowdKDMCLaROt\nYhzveEmlTg0Bm/yngoEQ+jXhPK3dWDkVmI0rLOyYwKXomKCYnq5hsYUzd398\nIyFtmCunqYB9kjkvDGPzcFblMg0+eJNzky8zoH8vu1cnT+VbrPFdEWwjY8db\npNTmn1Sxbn1nSHKBY21N/2JZv41xzoEs84yvlaYIJdABEkaDOBuYSaz7y6zm\nVkrnBxcNVoS+hLIAWYuOzhV+u5Cu+6oD0QuJmJLxpCiTiKF8OBmE5tQ4ViNl\nRRxeIOXP+OsdkZCKZiginuCqmnXODHBumM9ojScCxoTs7CF26AygdF3Sj/qK\nrJUE\r\n=YNpw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBl/D4YEXfriQOBWwWYOxpa3xk7eiBFPm3csQYtXxRRLAiEAlt6PPzAR+V6zxIafRlpgVqyMgC0ny2TC01wcBo7JiWE="}]},"_npmUser":{"name":"cmodic","email":"caroline.modic@gmail.com"},"directories":{},"maintainers":[{"name":"cmodic","email":"caroline.modic@gmail.com"},{"name":"beausmith","email":"beau@beausmith.com"},{"name":"benadida","email":"ben@adida.net"},{"name":"eventualbuddha","email":"brian@donovans.cc"},{"name":"votingworks-owner","email":"brian@voting.works"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_5.1.0-beta.1_1605290177460_0.8268184924795781"},"_hasShrinkwrap":false},"5.1.1":{"name":"@votingworks/ballot-encoder","version":"5.1.1","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}'","publish:npm":"yarn test:coverage && tsc && npm publish --access public && ts-emit-clean","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"dependencies":{"@antongolub/iso8601":"^1.2.1","js-sha256":"^0.9.0","zod":"1.7.1"},"devDependencies":{"@types/jest":"^26.0.15","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^4.6.1","@typescript-eslint/parser":"^4.6.1","eslint":"^7.12.1","eslint-config-prettier":"^6.15.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-no-array-sort-mutation":"../eslint-plugin-no-array-sort-mutation","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.4","husky":"^4.3.0","jest":"^26.6.2","jest-watch-typeahead":"^0.6.1","lint-staged":"^10.5.1","prettier":"^2.1.2","random-js":"^2.1.0","sort-package-json":"^1.46.1","ts-emit-clean":"^1.0.0","ts-jest":"^26.4.3","typescript":"^4.0.5"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"description":"Provides encoding and decoding services for completed ballots.","_id":"@votingworks/ballot-encoder@5.1.1","_nodeVersion":"14.15.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-GYWwlq6/AB/KEUYcq5Dy1+JI01iTmRR8jMuIX0IivdUzK9FITg3Hm+TyXzIgMjOoLNoyx+weiSNsR3UnIQ/GQw==","shasum":"bab6b9b717dd131a1bbc73ac9acd5505c7ef11f1","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-5.1.1.tgz","fileCount":80,"unpackedSize":419479,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrvO3CRA9TVsSAnZWagAA3SMP/i03tgCTRZ+59g6GcIs5\n5UUjiIrq6txIcnRMA9Bovy9uyG9zphyUSCfHDDzj+JqBCSpbAejkDNf63i9q\nwuVMxcuGzTM1U/1wSy/i0C8MVRHJa4t7QoMLbOr3AGrMT1Im4ZWSQxd2qB+q\nLcb/qkKfl12pG2B5VEoQw1BW/7QAJjYGMmKMmr7ZRfMIrYmZ0fjMF2OKeSiJ\nzxFZYXVw8RJltSPeBHmluFK7BvhODErUZ80kXKbjV3I3WKFf/aGL6W4Xlxaw\npxEHC5Fyo/AGGCDw8kAmjU/bNm8ogBBUqufTqd5SVfHL7uEIfsA4qzZQPnlI\nKGEJfCmfXt+oXOc12Fvju233ZKPnliaLaddJSrRbd85cLrkxbuBIfrRj0haW\nOJd0wIbgP/0e4kHILZ6W8Key8QcpPLl4xqbwuYG8orLJKyei3/krbsw34jLM\nR7/2zssJ7i8+z+3O/PE7mh1AMSIsGqGgBJdkMsY3X8hNovtAZq5286nygkv+\n//lcUtWsYjA5MmUJFtPedmDa/JCbM9aN2UFR/CGCgYCzeyR4ckqfZbyh5Qi2\ntpwDrzqBC0em3R5xTfgZqT9SiUqKgDzp/lVKdKDzQHihANwoNU+PorERwcS/\nFH9+gsv+qWtIimYrKoLoKfM2WG/4Lqav5ymJ0eoppeKzEiT3tVzaX5WF0A4D\nQT2J\r\n=O0cH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6yu5YxEMW3l/D82EF5FX6Pm3cW4mklK98xSOtY+roMgIhAPBlIwi0DDFGzX9GGRMnDN1iVKDT5b/f+RTJQBAkrnJA"}]},"_npmUser":{"name":"cmodic","email":"caroline.modic@gmail.com"},"directories":{},"maintainers":[{"name":"cmodic","email":"caroline.modic@gmail.com"},{"name":"beausmith","email":"beau@beausmith.com"},{"name":"benadida","email":"ben@adida.net"},{"name":"eventualbuddha","email":"brian@donovans.cc"},{"name":"votingworks-owner","email":"brian@voting.works"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_5.1.1_1605301175338_0.6023311924734074"},"_hasShrinkwrap":false,"deprecated":"uses fs which will break client integrations"},"5.1.1-beta.0":{"name":"@votingworks/ballot-encoder","version":"5.1.1-beta.0","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}'","publish:npm":"yarn test:coverage && tsc && npm publish --access public && ts-emit-clean","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"dependencies":{"@antongolub/iso8601":"^1.2.1","js-sha256":"^0.9.0","zod":"1.7.1"},"devDependencies":{"@types/jest":"^26.0.15","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^4.6.1","@typescript-eslint/parser":"^4.6.1","@types/node":"14.0.1","eslint":"^7.12.1","eslint-config-prettier":"^6.15.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-no-array-sort-mutation":"../eslint-plugin-no-array-sort-mutation","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.4","husky":"^4.3.0","jest":"^26.6.2","jest-watch-typeahead":"^0.6.1","lint-staged":"^10.5.1","prettier":"^2.1.2","random-js":"^2.1.0","sort-package-json":"^1.46.1","ts-emit-clean":"^1.0.0","ts-jest":"^26.4.3","typescript":"^4.0.5"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"readme":"# Ballot Encoder\n\nProvides encoding and decoding services for completed ballots.\n\n## Dev Install\n\nTo use within VS Code:\n\n```\nyarn install\nyarn pnpify --sdk\n```\n\n## Developing Alongside another Project\n\nIn dev `ballot-encoder` dir, run `yarn tsc` to generate JavaScript files.\n\nIn the PROJECT you wish to use this dev version of `ballot-encoder`:\n\n1. `cd path/to/PROJECT/node_modules/@votingworks`\n2. `rm -rf ballot-encoder`\n3. `ln -s path/to/ballot-encoder ballot-encoder`\n4. restart project server if applicable\n\n## Pubishing New NPM Version\n\n1. Update the version and create a git tag: `npm version [major|minor|patch]`\n2. Push branch for PR review. Once approved…\n3. Generate the JavaScript files from TypeScript: `yarn prepare` (or `yarn tsc`)\n4. Publish current version: `yarn npm publish --access=public`\n\nOptionally, deprecate a previous version. For example:\n`npm deprecate -f '@votingworks/ballot-encoder@1.3.1' \"Poor translations\"`\n\n## Example\n\n```ts\nimport {\n  CompletedBallot,\n  decodeBallot,\n  electionSample as election,\n  encodeBallot,\n  getContests,\n  vote,\n} from '@votingworks/ballot-encoder'\n\nconst ballotStyle = election.ballotStyles[0]\nconst precinct = election.precincts[0]\nconst ballotId = 'abcde'\nconst contests = getContests({ ballotStyle, election })\nconst votes = vote(contests, {\n  'judicial-robert-demergue': 'yes',\n  'judicial-elmer-hull': 'yes',\n  'question-a': 'yes',\n  'question-b': 'no',\n  'question-c': 'yes',\n  'proposition-1': 'yes',\n  'measure-101': 'no',\n  '102': 'yes',\n})\nconst ballot: CompletedBallot = {\n  ballotId,\n  ballotStyle,\n  precinct,\n  votes,\n}\n\nconsole.log(encodeBallot(ballot))\n/*\nUint8Array [\n  86, 88,  1,  2,  49,  50,  2,\n  50, 51,  0, 15, 254, 208, 86,\n  22, 38, 54, 70,  80\n]\n*/\n\nconsole.log(decodeBallot(election, encodeBallot(ballot)).ballot.votes)\n/*\n{\n  '102': 'yes',\n  'judicial-robert-demergue': 'yes',\n  'judicial-elmer-hull': 'yes',\n  'question-a': 'yes',\n  'question-b': 'no',\n  'question-c': 'yes',\n  'proposition-1': 'yes',\n  'measure-101': 'no'\n}\n*/\n```\n\n## Usage\n\nTo encode a ballot, simply pass an election and a completed ballot object to\n`encodeBallot`. You'll get back a buffer that may be stored or transmitted and\nlater passed to `decodeBallot` with the same `election` data given to\n`encodeBallot`.\n\nThere are multiple encoder versions and by default the latest will be used when\nencoding. To specify the version, pass the `EncoderVersion` as the second\nparameter to `encodeBallot`:\n\n```ts\nimport { encodeBallot, EncoderVersion } from '@votingworks/ballot-encoder'\n\nconst encodedBallot = encodeBallot(ballot, EncoderVersion.v1)\n```\n\nWhen decoding, you may pass an `EncoderVersion` or you may allow `decodeBallot`\nto detect the encoder version:\n\n```ts\nimport { decodeBallot, EncoderVersion } from '@votingworks/ballot-encoder'\n\n// automatically detect version\nconst result = decodeBallot(election, encodedBallot)\nconsole.log('Ballot version:', result.version)\nconsole.log('Ballot:', result.ballot)\n\n// specify version\nconst result = decodeBallot(election, encodedBallot, EncoderVersion.v0)\nconsole.log('Ballot version:', result.version)\nconsole.log('Ballot:', result.ballot)\n```\n\nIf you only want to detect the version, you can simply use `detect`:\n\n```ts\nimport { detect } from '@votingworks/ballot-encoder'\n\nconst version = detect(encodedBallot)\nconsole.log('Ballot version:', version)\n```\n\n## Publish\n\nThis project uses the\n[Angular Commit Message Format convention](https://gist.github.com/brianclements/841ea7bffdb01346392c).\nHow to publish a new version:\n\n1. Determine what the appropriate version bump is (i.e. patch, minor, or major).\n   Let's assume this is stored in the environment variable `BUMP`.\n2. Create a branch for publishing the new version.\n3. Bump the version: `npm version $BUMP`.\n4. Publish the package to NPM: `yarn publish:npm`.\n5. Push the branch and the new tag:\n   `git push -u origin HEAD && git push --tags`.\n6. Create a pull request for your newly pushed branch. Note that this pull\n   request should only have the version bump commit, nothing else.\n7. Get the pull request approved and merged.\n","readmeFilename":"README.md","description":"Provides encoding and decoding services for completed ballots.","_id":"@votingworks/ballot-encoder@5.1.1-beta.0","_nodeVersion":"14.15.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-ri4/Lg8BBo1YZFLOjqCCNRAhMuL6yy5dBs7wUvmpNTPLVlXMlb9tMd500UGgYGbPLLuz5jacvzDthLXS/s5GuA==","shasum":"c6cb8b71c852ac40d745b480bec894c6b117bd7e","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-5.1.1-beta.0.tgz","fileCount":80,"unpackedSize":419515,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsYrXCRA9TVsSAnZWagAAdGMP/2CDTf+Dc/4r74orXiDe\no9POUE8j0u2NyahnvYVoqvsH6tTL8geLEDZxkEt6+r2vB729V+ldO+Q3s0S+\nL60ORRPiNUgLvdqQ2UYJQSKJO8JYl2TkvckNtbR8/VpHnHpl5LJuUb9zls8x\nG72RnCmrwUm11eubmoJzYXWKqO4kDC15awKFTp1eHp5jDzpV8d7FWEPBqPji\n4DdXtbBdWCYguQQkojWDOiVjLMfERl6TyI346GVBOmwtm4mmpJLQtGBbEnoD\n7792HKu0n8gnaAZQcKIgjfcJAtpSmMw1+0gKc1aA6MTg26Py8gpFymV38zEb\nJ0/aH1+sP2A/Wid4S2EqX5kOiXBRqsPrRk6YLkxJZliGAGSxcHGMF2lGCipM\nkx5/pfCtlc9y2qnWGGVt0It8GQjSCUlfjgvGCmeDgzJT6Yz4xPeg3K9DLlf7\nLAjaX9dII7OjapCKGKfFt/bPhjWJI2ZIJe9xY6v8Faihjs6oe+QEMVIGdXnv\nCFCF8YQBkC9i8stdHwcuFT3zzcQsX2d9gVFuZJKqEY4IKBXvYZ/qIwrAoWis\nyjNpKe1IJ3c3RLzWaDH2cCil+Ns7cEP7lxyESphmgyfS7+B17JuDveKpr7GW\nNKUXja461aFepGbooGr6x2Axa9JhSDmHrYxQIMnywfvIgwhsuMHb9MwgTGe4\ndgPW\r\n=3u0q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBD0rZkW3P+cqtwJ26ps73PWWLuV0tvwFxkuQzh7viUfAiEAsqWV25Xndtvied/3LmElW+Vaxg/gCerFWKdPKxlr4zo="}]},"_npmUser":{"name":"cmodic","email":"caroline.modic@gmail.com"},"directories":{},"maintainers":[{"name":"cmodic","email":"caroline.modic@gmail.com"},{"name":"beausmith","email":"beau@beausmith.com"},{"name":"benadida","email":"ben@adida.net"},{"name":"eventualbuddha","email":"brian@donovans.cc"},{"name":"votingworks-owner","email":"brian@voting.works"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_5.1.1-beta.0_1605470935150_0.9606206179127394"},"_hasShrinkwrap":false},"5.1.2":{"name":"@votingworks/ballot-encoder","version":"5.1.2","main":"src/index.js","types":"src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}'","publish:npm":"yarn test:coverage && tsc && npm publish --access public && ts-emit-clean","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"dependencies":{"@antongolub/iso8601":"^1.2.1","js-sha256":"^0.9.0","zod":"1.7.1"},"devDependencies":{"@types/jest":"^26.0.15","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^4.6.1","@typescript-eslint/parser":"^4.6.1","eslint":"^7.12.1","eslint-config-prettier":"^6.15.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-no-array-sort-mutation":"../eslint-plugin-no-array-sort-mutation","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.4","husky":"^4.3.0","jest":"^26.6.2","jest-watch-typeahead":"^0.6.1","lint-staged":"^10.5.1","prettier":"^2.1.2","random-js":"^2.1.0","sort-package-json":"^1.46.1","ts-emit-clean":"^1.0.0","ts-jest":"^26.4.3","typescript":"^4.0.5"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"description":"Provides encoding and decoding services for completed ballots.","_id":"@votingworks/ballot-encoder@5.1.2","_nodeVersion":"14.15.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Wk0uMjeWvycZloJEiE2Dc+bQCwYOeb8hT8kARXARb6Ist1YTPW83Y9GUwUw//MAUlMueVju9iINTWKezH4kH9Q==","shasum":"326480b67789e030022eb46dc2a290d3405bcf82","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-5.1.2.tgz","fileCount":80,"unpackedSize":419392,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsrRtCRA9TVsSAnZWagAAFq4QAJ8jRcj6jEq8piC09Maw\nr5NQgSqObI7/QIl5rqTU/LYeIRjtWzveB2aa34pp547BDoJFFIx5Iuk/xDBg\n3fHh6zSL00VVjkNhplckZPIwUqLsB/LRVFjicgHxIgw3Sfsrba/jTXdUl/+o\nHE3SK7T5FEnj2P6/9TugMAm80MbM1GK+iM28zXRB6EwD0jZUkixhLNCAYYj/\nC7uPYXqsVFd/X5aZfZrLoDFT6PvQpbt0pxQvan9jVkwOtNqy29S866obZ/zu\nevILcPtEAZoL+RGdsSEzlt3XzpfMo03C7AcFd6BTpHygC7yos1Lj4l1oQnI5\nkQ3HZ/WQdIlMDycEn4OxL8i3KhEwX8ti4vGGSfDcaWwx36E8W4SLhPcoUHSP\nAXjz/3Y2G1buXr4rvyr0uDBfQP99KpmBR54gvh6qEM/OYKfGw7cOchhfMut1\nWOW2GEtsB//O+amOyKZux6y3Hfs8zkhPpRFkHTbUtvuLmS9aIFQ4zsrl3OpU\n+yHwl3oqcb8UswMe6+aMWJmX3BBSXASp+X31RaJc1n92NIWqxGkwku8da7OJ\nc2wlpy7HIgqF+Z3HWxcPyX92/sgBywuKZWuab8pK496kkxPF1N+uQY+/S+qy\nVQvXehj7diJktzXnmIYQ3c/mrFlId666tI466RmM+PBluSKjMbOTvkra2jL0\nBCMP\r\n=zPK5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH6AqV2BmjxG6NtCcjKAYLQnawBWjeaP/roXffi5nWiSAiEA/AvdIpSRPs3aZ5ASPZ1k8mjloqTwjlTR4YM2xxaUgVU="}]},"_npmUser":{"name":"cmodic","email":"caroline.modic@gmail.com"},"directories":{},"maintainers":[{"name":"cmodic","email":"caroline.modic@gmail.com"},{"name":"beausmith","email":"beau@beausmith.com"},{"name":"benadida","email":"ben@adida.net"},{"name":"eventualbuddha","email":"brian@donovans.cc"},{"name":"votingworks-owner","email":"brian@voting.works"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_5.1.2_1605547116742_0.21479751038620343"},"_hasShrinkwrap":false},"5.2.0":{"name":"@votingworks/ballot-encoder","version":"5.2.0","main":"lib/src/index.js","types":"lib/src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}'","publish:npm":"pnpm test:coverage && tsc && npm publish --access public && ts-emit-clean","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"dependencies":{"@antongolub/iso8601":"^1.2.1","js-sha256":"^0.9.0","zod":"1.7.1"},"devDependencies":{"@types/jest":"^26.0.15","@types/node":"^14.14.20","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^4.11.0","@typescript-eslint/parser":"^4.11.0","eslint":"^7.17.0","eslint-config-prettier":"^6.15.0","eslint-import-resolver-node":"^0.3.4","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-no-array-sort-mutation":"workspace:*","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.4","husky":"^4.3.0","jest":"^26.6.2","jest-watch-typeahead":"^0.6.1","lint-staged":"^10.5.1","prettier":"^2.1.2","random-js":"^2.1.0","sort-package-json":"^1.46.1","ts-emit-clean":"^1.0.0","ts-jest":"^26.4.3","typescript":"^4.1.3"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"description":"Provides encoding and decoding services for completed ballots.","_id":"@votingworks/ballot-encoder@5.2.0","_nodeVersion":"12.19.0","_npmVersion":"7.4.0","dist":{"integrity":"sha512-K0OhecAbJ0ZdOnWy/RBBVdExuqQz0BAXgSm/4C3G7+Z6rOf4Ddru/VuMF3tv4LZKHThqy5OXV/+1x6ZEOykicA==","shasum":"0de6b15dbf67f4e5cef305e5249fb03a0f3220dd","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-5.2.0.tgz","fileCount":7,"unpackedSize":200843,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgDxLLCRA9TVsSAnZWagAA8O4P/jy/ZpQjC/M0iWlzgVm6\ns8efW8rcFXpk8xxGtwoHF2wtXv1oupF0guvYIHzxl193bVtBvstvCSV0h1Jh\nERTx18AHwsQ2dyqaXNSQDO/2e8B3NAjVhWIR1U+sGS15H+oNsQw422Il7xUy\nut9EL3p5lnoDQ53h3NCjMjrLJf0DXgBOd+w/us20irhH2fmRub62jNkuQ6gB\nDZ6+UF2FTU8tI1lfE6HoVdT0uNZtcslyy7UwN/m/2a9l4+hGhcZTyNevzVq4\nAoISOxiouRv7qho6stoBDX2GfKsk24CyS/Dujj4mjotR1UBPAOonp4OKTtXh\nZrhznPgijmj+Um34HQwhXx2dqFWwHMoZ3AwWXitXM1mAnL7lsJtLjhlVa1u0\nGp2LRFSAiyqoBBE60yKClu6suJt2rejAwoNlPsM0EC5+Tg7E3xWtdObvpM1B\n0Gi5cpSjTerUpMg8jIcwa/PXHvv6Ejv1kGm//h7LpqRmpvjnq1RDLGzour0R\nwNMd5zJc5Mi/HLznGiuxi3DieNjgI+YTWkMbWv/4knDs1cSEoRRvftlvkRe5\nAe6KnIwiNVw0CXo/LsY9BZABMbw0kBPODGIHluMtILaf66JzfUKpl3uDeKTj\nLUSUdQapHpmQ9VGKU3OfIySCKCjbXfWwxn7DpIDqW2vTaTmljWh/hDJ/Jgsk\nzlq9\r\n=chg7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIERejNTRbrlO2uvo+TFJAwFrpcipusJxxzKbgnCHvwwpAiAAqlAn/1s2P6ISZGTdPaeCMg67xdorHPT6npjL8V+lew=="}]},"_npmUser":{"name":"eventualbuddha","email":"brian@donovans.cc"},"directories":{},"maintainers":[{"name":"votingworks-owner","email":"brian@voting.works"},{"name":"eventualbuddha","email":"brian@donovans.cc"},{"name":"benadida","email":"ben@adida.net"},{"name":"beausmith","email":"beau@beausmith.com"},{"name":"cmodic","email":"caroline.modic@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_5.2.0_1611600587054_0.8039246027258935"},"_hasShrinkwrap":false,"deprecated":"bad build"},"5.2.1":{"name":"@votingworks/ballot-encoder","version":"5.2.1","main":"lib/src/index.js","types":"lib/src/index.d.ts","scripts":{"lint":"eslint 'src/**/*.{ts,js}'","publish:npm":"rm -rf lib && pnpm test:coverage && tsc && npm publish --access public","test":"jest","test:ci":"jest --ci --collectCoverage","test:coverage":"jest --collectCoverage","test:debug":"node --inspect-brk $(which jest) --runInBand --no-cache","test:watch":"jest --watch"},"husky":{"hooks":{"pre-commit":"lint-staged"}},"lint-staged":{"*.(js|ts)":["eslint --quiet --fix","git add"],"*.md":["prettier --write","git add"],"package.json":["sort-package-json","git add"]},"dependencies":{"@antongolub/iso8601":"^1.2.1","js-sha256":"^0.9.0","zod":"1.7.1"},"devDependencies":{"@types/jest":"^26.0.15","@types/node":"^14.14.20","@types/text-encoding":"^0.0.35","@typescript-eslint/eslint-plugin":"^4.11.0","@typescript-eslint/parser":"^4.11.0","eslint":"^7.17.0","eslint-config-prettier":"^6.15.0","eslint-import-resolver-node":"^0.3.4","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-no-array-sort-mutation":"workspace:*","eslint-plugin-no-null":"^1.0.2","eslint-plugin-prettier":"^3.1.4","husky":"^4.3.0","jest":"^26.6.2","jest-watch-typeahead":"^0.6.1","lint-staged":"^10.5.1","prettier":"^2.1.2","random-js":"^2.1.0","sort-package-json":"^1.46.1","ts-jest":"^26.4.3","typescript":"^4.1.3"},"engines":{"node":">= 12"},"publishConfig":{"access":"public"},"description":"Provides encoding and decoding services for completed ballots.","_id":"@votingworks/ballot-encoder@5.2.1","_nodeVersion":"12.19.0","_npmVersion":"7.4.0","dist":{"integrity":"sha512-4w+bCnp1BqGcFGvBYNDBwQUgctXrRDUwt7Snxahl6I+Taek7yiGdIUkLyyL7jlxhaKhOeJZhdHWctlNaYCVspg==","shasum":"04ecaba210c0cb5e91c6870d5331e607281c5b9e","tarball":"https://registry.npmjs.org/@votingworks/ballot-encoder/-/ballot-encoder-5.2.1.tgz","fileCount":45,"unpackedSize":351426,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgDzHvCRA9TVsSAnZWagAAslIP/jvKWZUowuQIi0rzF4dp\nt99ECCo6J7DZ/p5wTppIcCG9TcjLMGjai6ngIUH8ehMQOaq9+uvuxuCus/BK\nMj9b65s6RIlBx538dc1VopU1Txfq8Xy30urdqh7jDFqr3qqz0kcov/w6rYrv\nK23lBDCahyJ9isG3CwKt/r8BujAk2P7QfvmFIDRkpT2WECgyxqF9HMPsgOO0\nZCeb4awX5ES/l4Va8dIyueKO5q0lTJ/4hLG5fH7QY/09hC5ULwoOiMVcWDiJ\nWB/tyHEud/IzAv8HXg8olOlS3szsKVhW39sb/0LcDw7WGWIJABeHbVG4rRDK\nktwjdWiPkLOduzQU2PSLGAMC/dAck9E4sJPbkhIkVc5dx7hCcckzg3EghVFB\nL42RUcyXOuKiJFELR+OeCI89QFOJ9LKhKONn5g5kRaCywZ5eFO8xUCi9QVtg\nbOuf9yxVKDOxjaq8Y71+b2gRMKEEJHjWkc6VAiIno4tYbhWk8s0ITQLgQXrK\nAuJ9XxqB2B+iDrYIcoKN3I9apiE3mMyCaQyTqgwZDZqoItEzCS9+PaOz9tEh\nhsneVR4Sw8kMAo84m+1u1KnuSZhxu7tdFmzVorOpRqmjkJNXL4HgTYYyTt/I\nVIG5+ha99e/d24o8HOB+45V8GX628gayoV85dqXFuzcKMAH2NoqKlUFK5lTC\nK8si\r\n=Tx9G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+FWmPe6fJ+oJ9VixNipsEmc/0D2Xi0aIYJ2O8g583hgIhAPJW5wx0uhDhOp6j9JWxxm24Si5KeYKObBZ/cmiy7z8h"}]},"_npmUser":{"name":"eventualbuddha","email":"brian@donovans.cc"},"directories":{},"maintainers":[{"name":"votingworks-owner","email":"brian@voting.works"},{"name":"eventualbuddha","email":"brian@donovans.cc"},{"name":"benadida","email":"ben@adida.net"},{"name":"beausmith","email":"beau@beausmith.com"},{"name":"cmodic","email":"caroline.modic@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ballot-encoder_5.2.1_1611608558994_0.9099788894842626"},"_hasShrinkwrap":false}},"time":{"created":"2019-09-28T03:06:11.439Z","1.0.0":"2019-09-28T03:06:11.889Z","modified":"2022-04-07T11:19:56.846Z","1.0.1":"2019-09-28T03:09:45.065Z","1.0.2":"2019-09-28T03:13:27.115Z","1.1.0":"2019-10-01T00:16:06.194Z","1.2.0":"2019-10-07T18:17:13.994Z","1.3.0":"2020-06-29T19:06:57.099Z","1.3.1":"2020-06-29T19:10:34.599Z","1.3.2":"2020-06-30T20:26:07.131Z","1.3.3":"2020-06-30T21:34:25.499Z","1.4.0":"2020-07-03T03:43:29.968Z","1.4.1":"2020-07-06T19:52:36.538Z","2.0.0":"2020-07-07T23:03:17.248Z","2.0.1":"2020-07-15T17:40:03.262Z","2.1.0":"2020-08-10T15:54:03.909Z","2.1.1":"2020-08-10T15:54:55.398Z","2.2.0":"2020-08-10T20:24:12.926Z","3.0.0":"2020-08-25T17:34:28.556Z","3.1.0":"2020-08-31T05:07:09.710Z","4.0.0":"2020-08-31T19:43:01.064Z","5.0.0":"2020-10-08T16:47:53.963Z","5.1.0":"2020-11-13T00:16:40.602Z","5.1.0-beta.0":"2020-11-13T16:52:42.280Z","5.1.0-beta.1":"2020-11-13T17:56:17.632Z","5.1.1":"2020-11-13T20:59:35.457Z","5.1.1-beta.0":"2020-11-15T20:08:55.323Z","5.1.2":"2020-11-16T17:18:36.913Z","5.2.0":"2021-01-25T18:49:47.173Z","5.2.1":"2021-01-25T21:02:39.410Z"},"maintainers":[{"name":"votingworks-owner","email":"brian@voting.works"},{"name":"eventualbuddha","email":"brian@donovans.cc"},{"name":"benadida","email":"ben@adida.net"},{"name":"beausmith","email":"beau@beausmith.com"},{"name":"cmodic","email":"caroline.modic@gmail.com"}],"readme":"# Ballot Encoder\n\nProvides encoding and decoding services for completed ballots.\n\n## Dev Install\n\nTo use within VS Code:\n\n```\npnpm install\n```\n\n## Pubishing New NPM Version\n\n1. Update the version and create a git tag: `npm version [major|minor|patch]`\n2. Push branch for PR review. Once approved…\n3. Generate the JavaScript files from TypeScript: `pnpm prepare` (or `pnpx tsc`)\n4. Publish current version: `npm publish --access=public`\n\nOptionally, deprecate a previous version. For example:\n`npm deprecate -f '@votingworks/ballot-encoder@1.3.1' \"Poor translations\"`\n\n## Example\n\n```ts\nimport {\n  CompletedBallot,\n  decodeBallot,\n  electionSample as election,\n  encodeBallot,\n  getContests,\n  vote,\n} from '@votingworks/ballot-encoder'\n\nconst ballotStyle = election.ballotStyles[0]\nconst precinct = election.precincts[0]\nconst ballotId = 'abcde'\nconst contests = getContests({ ballotStyle, election })\nconst votes = vote(contests, {\n  'judicial-robert-demergue': 'yes',\n  'judicial-elmer-hull': 'yes',\n  'question-a': 'yes',\n  'question-b': 'no',\n  'question-c': 'yes',\n  'proposition-1': 'yes',\n  'measure-101': 'no',\n  '102': 'yes',\n})\nconst ballot: CompletedBallot = {\n  ballotId,\n  ballotStyle,\n  precinct,\n  votes,\n}\n\nconsole.log(encodeBallot(ballot))\n/*\nUint8Array [\n  86, 88,  1,  2,  49,  50,  2,\n  50, 51,  0, 15, 254, 208, 86,\n  22, 38, 54, 70,  80\n]\n*/\n\nconsole.log(decodeBallot(election, encodeBallot(ballot)).ballot.votes)\n/*\n{\n  '102': 'yes',\n  'judicial-robert-demergue': 'yes',\n  'judicial-elmer-hull': 'yes',\n  'question-a': 'yes',\n  'question-b': 'no',\n  'question-c': 'yes',\n  'proposition-1': 'yes',\n  'measure-101': 'no'\n}\n*/\n```\n\n## Usage\n\nTo encode a ballot, simply pass an election and a completed ballot object to\n`encodeBallot`. You'll get back a buffer that may be stored or transmitted and\nlater passed to `decodeBallot` with the same `election` data given to\n`encodeBallot`.\n\nThere are multiple encoder versions and by default the latest will be used when\nencoding. To specify the version, pass the `EncoderVersion` as the second\nparameter to `encodeBallot`:\n\n```ts\nimport { encodeBallot, EncoderVersion } from '@votingworks/ballot-encoder'\n\nconst encodedBallot = encodeBallot(ballot, EncoderVersion.v1)\n```\n\nWhen decoding, you may pass an `EncoderVersion` or you may allow `decodeBallot`\nto detect the encoder version:\n\n```ts\nimport { decodeBallot, EncoderVersion } from '@votingworks/ballot-encoder'\n\n// automatically detect version\nconst result = decodeBallot(election, encodedBallot)\nconsole.log('Ballot version:', result.version)\nconsole.log('Ballot:', result.ballot)\n\n// specify version\nconst result = decodeBallot(election, encodedBallot, EncoderVersion.v0)\nconsole.log('Ballot version:', result.version)\nconsole.log('Ballot:', result.ballot)\n```\n\nIf you only want to detect the version, you can simply use `detect`:\n\n```ts\nimport { detect } from '@votingworks/ballot-encoder'\n\nconst version = detect(encodedBallot)\nconsole.log('Ballot version:', version)\n```\n\n## Publish\n\nThis project uses the\n[Angular Commit Message Format convention](https://gist.github.com/brianclements/841ea7bffdb01346392c).\nHow to publish a new version:\n\n1. Determine what the appropriate version bump is (i.e. patch, minor, or major).\n   Let's assume this is stored in the environment variable `BUMP`.\n2. Create a branch for publishing the new version.\n3. Bump the version: `npm version $BUMP`.\n4. Publish the package to NPM: `pnpm publish:npm`.\n5. Push the branch and the new tag:\n   `git push -u origin HEAD && git push --tags`.\n6. Create a pull request for your newly pushed branch. Note that this pull\n   request should only have the version bump commit, nothing else.\n7. Get the pull request approved and merged.\n","readmeFilename":"README.md","description":"Provides encoding and decoding services for completed ballots."}