git: 09353d0a9c71 - main - games/anki: Update to 2.1.54

From: Kai Knoblich <kai_at_FreeBSD.org>
Date: Fri, 16 Sep 2022 03:45:02 UTC
The branch main has been updated by kai:

URL: https://cgit.FreeBSD.org/ports/commit/?id=09353d0a9c71e245d4460d90af49451261a8d587

commit 09353d0a9c71e245d4460d90af49451261a8d587
Author:     Kai Knoblich <kai@FreeBSD.org>
AuthorDate: 2022-09-16 03:42:24 +0000
Commit:     Kai Knoblich <kai@FreeBSD.org>
CommitDate: 2022-09-16 03:42:24 +0000

    games/anki: Update to 2.1.54
    
    * Remove BROKEN for aarch64 as the FreeBSD related sections in the
      Bazel rules should now be architecture independent.
    
    * Build a separate binary version of "esbuild" beforehand as the JS
      counterpart, which is used by the Bazel NodeJS ruleset, has fixed
      version checks that cannot patched out easily.
    
    Changelogs since 2.1.49:
    
    https://github.com/ankitects/anki/releases/tag/2.1.54
    https://github.com/ankitects/anki/releases/tag/2.1.53
    https://github.com/ankitects/anki/releases/tag/2.1.52
    https://github.com/ankitects/anki/releases/tag/2.1.51
    https://github.com/ankitects/anki/releases/tag/2.1.50
    
    Reviewed by:    tcberner (earlier revision)
    MFH:            No (feature release)
    Differential Revision:  https://reviews.freebsd.org/D36461
---
 games/anki/Makefile                                | 504 +++++++------
 games/anki/distinfo                                | 790 +++++++++++----------
 games/anki/files/bazel/BUILD.bazel-i18n            |  10 -
 games/anki/files/bazel/BUILD.bazel-pyqt5           |  27 -
 games/anki/files/bazel/pyqt5.bzl                   |  13 -
 games/anki/files/bazel/repos.bzl                   |  20 +-
 games/anki/files/patch-WORKSPACE                   |   9 -
 games/anki/files/patch-defs.bzl                    |  47 +-
 games/anki/files/patch-late__deps.bzl              |  16 +
 ...cal__repos_esbuild__toolchain_esbuild__repo.bzl |  14 -
 ...h-local__repos_esbuild__toolchain_toolchain.bzl |  12 -
 ...epos_rules__nodejs_internal_common_os__name.bzl |  29 -
 ...__nodejs_internal_npm__install_npm__install.bzl |  10 +-
 ...repos_rules__nodejs_nodejs_private_os__name.bzl |  33 +
 ...nodejs_toolchains_esbuild_esbuild__packages.bzl |  23 +
 ...js_toolchains_esbuild_esbuild__repositories.bzl |  43 ++
 ...repos_rules__nodejs_toolchains_node_BUILD.bazel |  29 +-
 games/anki/files/patch-platforms_BUILD.bazel       |  21 +-
 games/anki/files/patch-proto_protobuf.bzl          |  15 +-
 games/anki/files/patch-pylib_BUILD.bazel           |  52 ++
 games/anki/files/patch-pylib_anki_BUILD.bazel      |  23 +-
 .../files/patch-pylib_anki___backend_BUILD.bazel   |  15 +-
 games/anki/files/patch-pylib_tools_BUILD.bazel     |  17 +-
 games/anki/files/patch-python_binary.bzl           |  22 +
 games/anki/files/patch-python_pyqt_install.py      |  30 +
 .../{patch-python.bzl => patch-python_python.bzl}  |   6 +-
 games/anki/files/patch-python_stubs_BUILD.bazel    |  35 +
 games/anki/files/patch-qt_BUILD.bazel              |  25 +-
 games/anki/files/patch-qt_aqt_BUILD.bazel          |  10 +-
 games/anki/files/patch-rslib_Cargo.toml            |  16 -
 games/anki/files/patch-scripts_BUILD.bazel         |  10 -
 ...tch-scripts_status.sh => patch-tools_status.sh} |   4 +-
 games/anki/files/patch-ts_lib_BUILD.bazel          |  17 +-
 games/anki/pkg-message                             |   9 +
 games/anki/pkg-plist                               | 378 +++++++++-
 35 files changed, 1433 insertions(+), 901 deletions(-)

diff --git a/games/anki/Makefile b/games/anki/Makefile
index 4d4a1e4fb6d3..a6ea8d1d1370 100644
--- a/games/anki/Makefile
+++ b/games/anki/Makefile
@@ -1,10 +1,11 @@
 PORTNAME=	anki
-DISTVERSION=	2.1.49
-PORTREVISION=	4
+DISTVERSION=	2.1.54
 # Don't forget to update ${_MY_BUILDHASH} if DISTVERSION changes
 CATEGORIES=	games education python
-MASTER_SITES=	LOCAL/kai/:yarncache
-DISTFILES=	anki-yarn-cache-${DISTVERSION}${EXTRACT_SUFX}:yarncache
+MASTER_SITES=	LOCAL/kai/:yarncache \
+		LOCAL/kai/:npmcache
+DISTFILES=	anki-yarn-cache-${DISTVERSION}${EXTRACT_SUFX}:yarncache \
+		anki-npm-cache-${DISTVERSION}${EXTRACT_SUFX}:npmcache
 
 MAINTAINER=	kai@FreeBSD.org
 COMMENT=	Flashcard trainer with spaced repetition
@@ -13,15 +14,14 @@ WWW=		https://apps.ankiweb.net/
 LICENSE=	AGPLv3+
 LICENSE_FILE=	${WRKSRC}/LICENSE
 
-BROKEN_aarch64=	needs adjustments (e.g. "//platforms:freebsd_arm64") for the shipped Bazel rules files to include several files during build.
-
 NOT_FOR_ARCHS=	armv6 armv7 i386 mips powerpc
 NOT_FOR_ARCHS_REASON=	the bazel build framework supports only 64-bit systems.
 
 BUILD_DEPENDS=	bash:shells/bash \
 		bazel:devel/bazel \
-		esbuild:devel/esbuild \
+		npm:www/npm \
 		protoc:devel/protobuf \
+		rsync:net/rsync \
 		yarn:www/yarn \
 		${PYTHON_PKGNAMEPREFIX}mypy-protobuf>=1.21:devel/py-mypy-protobuf@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}stringcase>0:devel/py-stringcase@${PY_FLAVOR} \
@@ -29,10 +29,8 @@ BUILD_DEPENDS=	bash:shells/bash \
 		${PYTHON_PKGNAMEPREFIX}fluent>0:devel/py-fluent@${PY_FLAVOR} \
 		${RUN_DEPENDS}
 
-# For x64 architectures there's also a Python package "orjson" that still needs
-# to be ported once the required features (= "untagged unions",
-# "specialication" and "const_generics") of the "smallvec" crate are available
-# in the Rust release channel.
+# NB: For x64 architectures there's also a Python package devel/py-orjson.
+# Chances are good that it'll be added to RUN_DEPENDS with the next release.
 #
 # Although the "orjson" package is required via the setup.py of Anki's Python
 # library it's (still) optional in the code.
@@ -48,116 +46,118 @@ RUN_DEPENDS=	lame:audio/lame \
 		${PYTHON_PKGNAMEPREFIX}requests>0:www/py-requests@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}Flask>0:www/py-flask@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}Flask-Cors>0:www/py-flask-cors@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}protobuf>0:devel/py-protobuf@${PY_FLAVOR} \
-		${PYTHON_PKGNAMEPREFIX}stringcase>0:devel/py-stringcase@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}protobuf>=3.17:devel/py-protobuf@${PY_FLAVOR} \
 		${PYTHON_PKGNAMEPREFIX}waitress>0:www/py-waitress@${PY_FLAVOR}
 
 # USES=ssl is required for the compilation of the Rust code
-USES=		cargo desktop-file-utils pyqt:5 python:3.8+ shebangfix ssl
+USES=		cargo desktop-file-utils go:modules,no_targets nodejs:build pyqt:5 \
+		python:3.9+ shebangfix ssl
 USE_GITHUB=	yes
 GH_ACCOUNT=	ankitects
 # Translation files
-GH_TUPLE=	ankitects:anki-core-i18n:56d46d6:ftlrslib \
-		ankitects:anki-desktop-ftl:5359f84:ftlextra
+GH_TUPLE=	ankitects:anki-core-i18n:f3f9912:ftlrslib \
+		ankitects:anki-desktop-ftl:6e59ce7e:ftlextra
 # Bazel Skylib framework and sets of bazel rules
 GH_TUPLE+=	bazelbuild:bazel-skylib:e59b620:bzlskylib \
 		bazelbuild:rules_cc:40548a2:bzlrcc \
 		bazelbuild:rules_java:c13e3ea:bzlrjava \
-		bazelbuild:rules_nodejs:2d02e82:bzlrnodejs \
+		bazelbuild:rules_nodejs:45e97fc:bzlrnodejs \
 		bazelbuild:rules_proto:f7a30f6:bzlrproto \
-		ankitects:esbuild_toolchain:f942aa9:esbuildtc \
-		ankitects:rules_pip:fb02cb7:bzlrpip \
-		ankitects:rules_python:3927c9b:bzlrpython \
-		ankitects:rules_rust:f66001a:bzlrrust \
-		ankitects:rules_sass:275ace7:bzlrsass
+		bazelbuild:rules_python:b842276:bzlrpython \
+		ankitects:rules_rust:adf2790:bzlrrust \
+		bazelbuild:rules_sass:d0cda22:bzlrsass
+# esbuild dependencies
+GH_TUPLE+=	evanw:esbuild:${_MY_ESBUILDVER}:esbuild \
+		golang:sys:aa78b53d3365:golang_sys
 
 USE_PYQT=	pyqt5 sip webengine
 
 SHEBANG_FILES=	qt/tools/runanki.system.in
 
-CARGO_CRATES=	Inflector-0.11.4 \
-		adler-1.0.2 \
-		ahash-0.7.4 \
+CARGO_CRATES=	adler-1.0.2 \
+		ahash-0.7.6 \
 		aho-corasick-0.7.18 \
-		ammonia-3.1.2 \
-		anyhow-1.0.42 \
-		arc-swap-1.3.0 \
+		ammonia-3.1.4 \
+		anyhow-1.0.56 \
+		arc-swap-1.5.0 \
 		arrayref-0.3.6 \
 		arrayvec-0.4.12 \
-		arrayvec-0.5.2 \
-		askama-0.10.5 \
-		askama_derive-0.10.5 \
-		askama_escape-0.10.1 \
-		askama_shared-0.11.1 \
-		async-trait-0.1.51 \
+		arrayvec-0.7.2 \
+		async-trait-0.1.52 \
 		atty-0.2.14 \
-		autocfg-1.0.1 \
+		autocfg-1.1.0 \
 		base64-0.13.0 \
-		bitflags-1.2.1 \
-		bitvec-0.19.5 \
-		blake3-0.3.8 \
-		bumpalo-3.7.0 \
+		bitflags-1.3.2 \
+		blake3-1.3.1 \
+		block-buffer-0.10.2 \
+		bstr-0.2.17 \
+		bumpalo-3.9.1 \
 		byteorder-1.4.3 \
-		bytes-1.0.1 \
-		cc-1.0.69 \
-		cfg-if-0.1.10 \
+		bytes-1.1.0 \
+		cast-0.2.7 \
+		cc-1.0.73 \
 		cfg-if-1.0.0 \
 		chrono-0.4.19 \
-		coarsetime-0.1.19 \
+		clap-2.34.0 \
+		coarsetime-0.1.21 \
 		codespan-0.11.1 \
 		codespan-reporting-0.11.1 \
 		constant_time_eq-0.1.5 \
 		convert_case-0.4.0 \
-		core-foundation-0.9.1 \
-		core-foundation-sys-0.8.2 \
-		crc32fast-1.2.1 \
-		crossbeam-channel-0.5.1 \
-		crossbeam-utils-0.8.5 \
-		crypto-mac-0.8.0 \
+		core-foundation-0.9.3 \
+		core-foundation-sys-0.8.3 \
+		crc32fast-1.3.2 \
+		criterion-0.3.5 \
+		criterion-plot-0.4.4 \
+		crossbeam-channel-0.5.2 \
+		crossbeam-deque-0.8.1 \
+		crossbeam-epoch-0.9.7 \
+		crossbeam-utils-0.8.7 \
+		crypto-common-0.1.3 \
 		cssparser-0.27.2 \
 		cssparser-macros-0.6.0 \
-		ctor-0.1.20 \
-		derivative-2.2.0 \
-		derive_more-0.99.16 \
-		digest-0.9.0 \
-		dirs-2.0.2 \
-		dirs-sys-0.3.6 \
+		csv-1.1.6 \
+		csv-core-0.1.10 \
+		derive_more-0.99.17 \
+		digest-0.10.3 \
+		dirs-next-2.0.0 \
+		dirs-sys-next-0.1.2 \
 		dtoa-0.4.8 \
 		dtoa-short-0.3.3 \
 		dunce-1.0.2 \
 		either-1.6.1 \
-		encoding_rs-0.8.28 \
-		env_logger-0.8.4 \
+		encoding_rs-0.8.30 \
+		env_logger-0.9.0 \
 		fallible-iterator-0.2.0 \
 		fallible-streaming-iterator-0.1.9 \
-		fixedbitset-0.2.0 \
-		flate2-1.0.20 \
-		fluent-0.15.0 \
-		fluent-bundle-0.15.1 \
+		fastrand-1.7.0 \
+		fixedbitset-0.4.1 \
+		flate2-1.0.22 \
+		fluent-0.16.0 \
+		fluent-bundle-0.15.2 \
 		fluent-langneg-0.13.0 \
 		fluent-syntax-0.11.0 \
 		fnv-1.0.7 \
 		foreign-types-0.3.2 \
 		foreign-types-shared-0.1.1 \
 		form_urlencoded-1.0.1 \
-		funty-1.1.0 \
-		futf-0.1.4 \
-		futures-0.3.16 \
-		futures-channel-0.3.16 \
-		futures-core-0.3.16 \
-		futures-executor-0.3.16 \
-		futures-io-0.3.16 \
-		futures-macro-0.3.16 \
-		futures-sink-0.3.16 \
-		futures-task-0.3.16 \
-		futures-util-0.3.16 \
+		futf-0.1.5 \
+		futures-0.3.21 \
+		futures-channel-0.3.21 \
+		futures-core-0.3.21 \
+		futures-executor-0.3.21 \
+		futures-io-0.3.21 \
+		futures-macro-0.3.21 \
+		futures-sink-0.3.21 \
+		futures-task-0.3.21 \
+		futures-util-0.3.21 \
 		fxhash-0.2.1 \
-		generic-array-0.14.4 \
+		generic-array-0.14.5 \
 		getopts-0.2.21 \
 		getrandom-0.1.16 \
-		getrandom-0.2.3 \
-		ghost-0.1.2 \
-		h2-0.3.3 \
+		getrandom-0.2.5 \
+		h2-0.3.12 \
+		half-1.8.2 \
 		hashbrown-0.11.2 \
 		hashlink-0.7.0 \
 		heck-0.3.3 \
@@ -165,194 +165,203 @@ CARGO_CRATES=	Inflector-0.11.4 \
 		hex-0.4.3 \
 		html5ever-0.25.1 \
 		htmlescape-0.3.1 \
-		http-0.2.4 \
-		http-body-0.4.2 \
-		httparse-1.4.1 \
-		httpdate-1.0.1 \
-		humansize-1.1.1 \
+		http-0.2.6 \
+		http-body-0.4.4 \
+		httparse-1.6.0 \
+		httpdate-1.0.2 \
 		humantime-2.1.0 \
-		hyper-0.14.11 \
+		hyper-0.14.17 \
 		hyper-rustls-0.22.1 \
 		hyper-tls-0.5.0 \
+		id_tree-1.8.0 \
 		idna-0.2.3 \
-		indexmap-1.7.0 \
+		indexmap-1.8.0 \
 		indoc-0.3.6 \
 		indoc-impl-0.3.6 \
 		inflections-1.1.1 \
-		instant-0.1.10 \
+		instant-0.1.12 \
 		intl-memoizer-0.5.1 \
 		intl_pluralrules-7.0.1 \
-		inventory-0.1.10 \
-		inventory-impl-0.1.10 \
-		ipnet-2.3.1 \
-		itertools-0.9.0 \
-		itertools-0.10.1 \
-		itoa-0.4.7 \
-		js-sys-0.3.52 \
+		ipnet-2.4.0 \
+		itertools-0.10.3 \
+		itoa-0.4.8 \
+		itoa-1.0.1 \
+		jobserver-0.1.24 \
+		js-sys-0.3.56 \
 		kuchiki-0.8.1 \
 		lazy_static-1.4.0 \
-		lexical-core-0.7.6 \
-		libc-0.2.98 \
-		libsqlite3-sys-0.22.2 \
+		libc-0.2.120 \
+		libsqlite3-sys-0.23.2 \
 		linkify-0.5.0 \
-		lock_api-0.4.4 \
+		lock_api-0.4.6 \
 		log-0.4.14 \
 		mac-0.1.1 \
 		maplit-1.0.2 \
 		markup5ever-0.10.1 \
 		markup5ever_rcdom-0.1.0 \
-		matches-0.1.8 \
-		memchr-2.4.0 \
+		matches-0.1.9 \
+		memchr-2.4.1 \
+		memoffset-0.6.5 \
 		mime-0.3.16 \
-		mime_guess-2.0.3 \
+		mime_guess-2.0.4 \
+		minimal-lexical-0.2.1 \
 		miniz_oxide-0.4.4 \
-		mio-0.7.13 \
+		mio-0.8.1 \
 		miow-0.3.7 \
 		multimap-0.8.3 \
-		native-tls-0.2.7 \
+		native-tls-0.2.8 \
 		new_debug_unreachable-1.0.4 \
 		nodrop-0.1.14 \
-		nom-6.1.2 \
-		nom-7.0.0-alpha1 \
-		ntapi-0.3.6 \
+		nom-7.1.1 \
+		ntapi-0.3.7 \
 		num-format-0.4.0 \
 		num-integer-0.1.44 \
 		num-traits-0.2.14 \
-		num_cpus-1.13.0 \
-		num_enum-0.5.2 \
-		num_enum_derive-0.5.2 \
-		once_cell-1.8.0 \
-		openssl-0.10.35 \
-		openssl-probe-0.1.4 \
-		openssl-sys-0.9.65 \
-		ouroboros-0.9.5 \
-		ouroboros_macro-0.9.5 \
-		parking_lot-0.11.1 \
-		parking_lot_core-0.8.3 \
+		num_cpus-1.13.1 \
+		num_enum-0.5.7 \
+		num_enum_derive-0.5.7 \
+		num_threads-0.1.4 \
+		once_cell-1.10.0 \
+		oorandom-11.1.3 \
+		openssl-0.10.38 \
+		openssl-probe-0.1.5 \
+		openssl-sys-0.9.72 \
+		parking_lot-0.11.2 \
+		parking_lot-0.12.0 \
+		parking_lot_core-0.8.5 \
+		parking_lot_core-0.9.1 \
 		paste-0.1.18 \
 		paste-impl-0.1.18 \
 		percent-encoding-2.1.0 \
-		pest-2.1.3 \
-		petgraph-0.5.1 \
+		petgraph-0.6.0 \
 		phf-0.8.0 \
-		phf-0.9.0 \
+		phf-0.10.1 \
 		phf_codegen-0.8.0 \
 		phf_generator-0.8.0 \
-		phf_generator-0.9.0 \
+		phf_generator-0.10.0 \
 		phf_macros-0.8.0 \
-		phf_macros-0.9.0 \
+		phf_macros-0.10.0 \
 		phf_shared-0.8.0 \
-		phf_shared-0.9.0 \
-		pin-project-1.0.8 \
-		pin-project-internal-1.0.8 \
-		pin-project-lite-0.2.7 \
+		phf_shared-0.10.0 \
+		pin-project-1.0.10 \
+		pin-project-internal-1.0.10 \
+		pin-project-lite-0.2.8 \
 		pin-utils-0.1.0 \
-		pkg-config-0.3.19 \
-		ppv-lite86-0.2.10 \
+		pkg-config-0.3.24 \
+		plotters-0.3.1 \
+		plotters-backend-0.3.2 \
+		plotters-svg-0.3.1 \
+		ppv-lite86-0.2.16 \
 		precomputed-hash-0.1.1 \
-		proc-macro-crate-1.0.0 \
-		proc-macro-error-1.0.4 \
-		proc-macro-error-attr-1.0.4 \
+		proc-macro-crate-1.1.3 \
 		proc-macro-hack-0.5.19 \
-		proc-macro-nested-0.1.6 \
-		proc-macro2-1.0.28 \
-		prost-0.7.0 \
-		prost-build-0.7.0 \
-		prost-derive-0.7.0 \
-		prost-types-0.7.0 \
+		proc-macro-nested-0.1.7 \
+		proc-macro2-1.0.36 \
+		prost-0.9.0 \
+		prost-build-0.9.0 \
+		prost-derive-0.9.0 \
+		prost-types-0.9.0 \
 		pulldown-cmark-0.8.0 \
-		pyo3-0.13.2 \
-		pyo3-macros-0.13.2 \
-		pyo3-macros-backend-0.13.2 \
-		quote-1.0.9 \
-		radium-0.5.3 \
+		pyo3-0.15.1 \
+		pyo3-build-config-0.15.1 \
+		pyo3-macros-0.15.1 \
+		pyo3-macros-backend-0.15.1 \
+		quote-1.0.15 \
 		rand-0.7.3 \
-		rand-0.8.4 \
+		rand-0.8.5 \
 		rand_chacha-0.2.2 \
 		rand_chacha-0.3.1 \
 		rand_core-0.5.1 \
 		rand_core-0.6.3 \
 		rand_hc-0.2.0 \
-		rand_hc-0.3.1 \
 		rand_pcg-0.2.1 \
-		redox_syscall-0.2.9 \
+		rayon-1.5.1 \
+		rayon-core-1.9.1 \
+		redox_syscall-0.2.11 \
 		redox_users-0.4.0 \
-		regex-1.5.4 \
-		regex-syntax-0.6.25 \
+		regex-1.5.6 \
+		regex-automata-0.1.10 \
+		regex-syntax-0.6.26 \
 		remove_dir_all-0.5.3 \
-		reqwest-0.11.4 \
 		ring-0.16.20 \
-		rusqlite-0.25.3 \
+		rusqlite-0.26.3 \
 		rustc-hash-1.1.0 \
-		rustc_version-0.3.3 \
+		rustc_version-0.4.0 \
 		rustls-0.19.1 \
 		rustls-native-certs-0.5.0 \
-		ryu-1.0.5 \
+		rustversion-1.0.6 \
+		ryu-1.0.9 \
+		same-file-1.0.6 \
 		schannel-0.1.19 \
 		scopeguard-1.1.0 \
 		sct-0.6.1 \
-		security-framework-2.3.1 \
-		security-framework-sys-2.3.0 \
+		security-framework-2.6.1 \
+		security-framework-sys-2.6.1 \
 		selectors-0.22.0 \
-		semver-0.11.0 \
-		semver-parser-0.10.2 \
-		serde-1.0.127 \
-		serde-aux-2.2.0 \
-		serde_derive-1.0.127 \
-		serde_json-1.0.66 \
+		self_cell-0.10.2 \
+		semver-1.0.6 \
+		serde-1.0.136 \
+		serde-aux-3.0.1 \
+		serde_cbor-0.11.2 \
+		serde_derive-1.0.136 \
+		serde_json-1.0.79 \
 		serde_repr-0.1.7 \
 		serde_tuple-0.5.0 \
 		serde_tuple_macros-0.5.0 \
-		serde_urlencoded-0.7.0 \
+		serde_urlencoded-0.7.1 \
 		servo_arc-0.1.1 \
-		sha1-0.6.0 \
-		siphasher-0.3.6 \
-		slab-0.4.3 \
+		sha1-0.6.1 \
+		sha1_smol-1.0.0 \
+		signal-hook-registry-1.4.0 \
+		siphasher-0.3.10 \
+		slab-0.4.5 \
 		slog-2.7.0 \
 		slog-async-2.7.0 \
 		slog-envlogger-2.2.0 \
 		slog-scope-4.4.0 \
 		slog-stdlog-4.1.0 \
-		slog-term-2.6.0 \
-		smallvec-1.6.1 \
-		socket2-0.4.1 \
+		slog-term-2.9.0 \
+		smallvec-1.8.0 \
+		snowflake-1.3.0 \
+		socket2-0.4.4 \
 		spin-0.5.2 \
 		stable_deref_trait-1.2.0 \
-		static_assertions-1.1.0 \
-		string_cache-0.8.1 \
+		string_cache-0.8.3 \
 		string_cache_codegen-0.5.1 \
-		strum-0.21.0 \
-		strum_macros-0.21.1 \
+		strum-0.23.0 \
+		strum_macros-0.23.1 \
 		subtle-2.4.1 \
-		syn-1.0.74 \
+		syn-1.0.88 \
 		take_mut-0.2.2 \
-		tap-1.0.1 \
-		tempfile-3.2.0 \
+		tempfile-3.3.0 \
 		tendril-0.4.2 \
-		term-0.6.1 \
-		termcolor-1.1.2 \
+		term-0.7.0 \
+		termcolor-1.1.3 \
+		textwrap-0.11.0 \
 		thin-slice-0.1.1 \
-		thiserror-1.0.26 \
-		thiserror-impl-1.0.26 \
-		thread_local-1.1.3 \
+		thiserror-1.0.30 \
+		thiserror-impl-1.0.30 \
+		thread_local-1.1.4 \
 		time-0.1.44 \
+		time-0.3.7 \
+		time-macros-0.2.3 \
 		tinystr-0.3.4 \
-		tinyvec-1.3.1 \
+		tinytemplate-1.2.1 \
+		tinyvec-1.5.1 \
 		tinyvec_macros-0.1.0 \
-		tokio-1.9.0 \
-		tokio-macros-1.3.0 \
+		tokio-1.17.0 \
+		tokio-macros-1.7.0 \
 		tokio-native-tls-0.3.0 \
 		tokio-rustls-0.22.0 \
 		tokio-socks-0.5.1 \
-		tokio-util-0.6.7 \
+		tokio-util-0.6.9 \
 		toml-0.5.8 \
 		tower-service-0.3.1 \
-		tracing-0.1.26 \
-		tracing-core-0.1.18 \
+		tracing-0.1.32 \
+		tracing-core-0.1.23 \
 		try-lock-0.2.3 \
 		type-map-0.4.0 \
-		typenum-1.13.0 \
-		ucd-trie-0.1.3 \
+		typenum-1.15.0 \
 		unic-char-property-0.9.0 \
 		unic-char-range-0.9.0 \
 		unic-common-0.9.0 \
@@ -363,45 +372,57 @@ CARGO_CRATES=	Inflector-0.11.4 \
 		unic-ucd-category-0.9.0 \
 		unic-ucd-version-0.9.0 \
 		unicase-2.6.0 \
-		unicode-bidi-0.3.5 \
+		unicode-bidi-0.3.7 \
 		unicode-normalization-0.1.19 \
-		unicode-segmentation-1.8.0 \
-		unicode-width-0.1.8 \
+		unicode-segmentation-1.9.0 \
+		unicode-width-0.1.9 \
 		unicode-xid-0.2.2 \
-		unindent-0.1.7 \
+		unindent-0.1.8 \
 		untrusted-0.7.1 \
 		url-2.2.2 \
 		utf-8-0.7.6 \
 		utf8-decode-1.0.1 \
 		utime-0.3.1 \
 		vcpkg-0.2.15 \
-		version_check-0.9.3 \
+		version_check-0.9.4 \
+		walkdir-2.3.2 \
 		want-0.3.0 \
 		wasi-0.9.0+wasi-snapshot-preview1 \
 		wasi-0.10.0+wasi-snapshot-preview1 \
-		wasm-bindgen-0.2.75 \
-		wasm-bindgen-backend-0.2.75 \
-		wasm-bindgen-futures-0.4.25 \
-		wasm-bindgen-macro-0.2.75 \
-		wasm-bindgen-macro-support-0.2.75 \
-		wasm-bindgen-shared-0.2.75 \
-		web-sys-0.3.52 \
+		wasi-0.11.0+wasi-snapshot-preview1 \
+		wasm-bindgen-0.2.79 \
+		wasm-bindgen-backend-0.2.79 \
+		wasm-bindgen-futures-0.4.29 \
+		wasm-bindgen-macro-0.2.79 \
+		wasm-bindgen-macro-support-0.2.79 \
+		wasm-bindgen-shared-0.2.79 \
+		web-sys-0.3.56 \
 		webpki-0.21.4 \
 		webpki-roots-0.21.1 \
-		which-4.2.2 \
+		which-4.2.4 \
 		winapi-0.3.9 \
 		winapi-i686-pc-windows-gnu-0.4.0 \
 		winapi-util-0.1.5 \
 		winapi-x86_64-pc-windows-gnu-0.4.0 \
+		windows-sys-0.32.0 \
+		windows_aarch64_msvc-0.32.0 \
+		windows_i686_gnu-0.32.0 \
+		windows_i686_msvc-0.32.0 \
+		windows_x86_64_gnu-0.32.0 \
+		windows_x86_64_msvc-0.32.0 \
 		winreg-0.7.0 \
-		wyz-0.2.0 \
-		xml5ever-0.16.1 \
+		xml5ever-0.16.2 \
 		zip-0.5.13 \
+		zstd-0.10.0+zstd.1.5.2 \
+		zstd-safe-4.1.4+zstd.1.5.2 \
+		zstd-sys-1.6.3+zstd.1.5.2 \
 		reqwest@git+https://github.com/ankitects/reqwest.git?rev=7591444614de02b658ddab125efba7b2bb4e2335\#7591444614de02b658ddab125efba7b2bb4e2335 \
 		hyper-timeout@git+https://github.com/ankitects/hyper-timeout.git?rev=0cb6f7d14c62819e37cd221736f8b0555e823712\#0cb6f7d14c62819e37cd221736f8b0555e823712 \
+		csv,csv-core@git+https://github.com/ankitects/rust-csv.git?rev=1c9d3aab6f79a7d815c69f925a46a4590c115f90\#1c9d3aab6f79a7d815c69f925a46a4590c115f90 \
 		linkcheck@git+https://github.com/ankitects/linkcheck.git?rev=2f20798ce521cc594d510d4e417e76d5eac04d4b\#2f20798ce521cc594d510d4e417e76d5eac04d4b \
 		tokio-io-timeout@git+https://github.com/ankitects/tokio-io-timeout.git?rev=1ee0892217e9a76bba4bb369ec5fab8854935a3c\#1ee0892217e9a76bba4bb369ec5fab8854935a3c \
 		pct-str@git+https://github.com/timothee-haudebourg/pct-str.git?rev=4adccd8d4a222ab2672350a102f06ae832a0572d\#4adccd8d4a222ab2672350a102f06ae832a0572d
+
 CARGO_CARGOTOML=	${WRKSRC}/pylib/rsbridge/Cargo.toml
 
 CARGO_BUILD=	no
@@ -415,8 +436,10 @@ CARGO_ENV=	BAZEL=1 \
 		PROTO_TOP=${WRKSRC}/proto/.top_level \
 		PROTOC=${LOCALBASE}/bin/protoc \
 		BACKEND_PROTO=${WRKSRC}/rslib/backend.proto \
-		RSLIB_FTL_ROOT=${_MY_LOCALREPO}/ftlrslib/l10n.toml \
-		EXTRA_FTL_ROOT=${_MY_LOCALREPO}/ftlextra/l10n.toml
+		RSLIB_FTL_ROOT=${WRKSRC_ftlrslib}/l10n.toml \
+		EXTRA_FTL_ROOT=${WRKSRC_ftlextra}/l10n.toml
+
+GO_TARGET=	./cmd/esbuild:esbuild
 
 OPTIONS_DEFAULT=	MPV
 OPTIONS_GROUP=		PLAYER
@@ -431,10 +454,15 @@ MPV_RUN_DEPENDS=	mpv:multimedia/mpv
 # Should contain the most recent commit that reflects ${DISTVERSION} and must
 # be exactly 8 digits otherwise the check for newer versions won't work as
 # expected.
-_MY_BUILDHASH=	dc80804a
+_MY_BUILDHASH=	b6a7760c
+# Required version of esbuild that is pre-built.  This is because the JS
+# counterpart of esbuild, which is used by the NodeJS ruleset for Bazel, has a
+# fixed version check for the binary version.
+_MY_ESBUILDVER=	v0.14.11
 # Path of the local bazel repositories
 _MY_LOCALREPO=	${WRKSRC}/local_repos
-# Path of cache that is used by www/yarn
+# Path of caches that are used by www/npm and www/yarn
+_MY_NPMCACHE=	${WRKDIR}/.npm
 _MY_YARNCACHE=	${WRKDIR}/.yarn
 
 post-extract:
@@ -447,25 +475,24 @@ post-extract:
 		${_MY_LOCALREPO}/local_node/node/lib \
 		${_MY_LOCALREPO}/local_node/yarn/bin \
 		${_MY_LOCALREPO}/protoc_bin_freebsd/bin \
-		${_MY_LOCALREPO}/pyqt5 \
 		${_MY_LOCALREPO}/rust_output/librsbridge \
 		${_MY_LOCALREPO}/rust_output/strings_json
 	# Create empty WORKSPACE files in the top directory of each local
 	# repository
 	@${TOUCH} ${_MY_LOCALREPO}/local_esbuild/WORKSPACE \
 		${_MY_LOCALREPO}/local_node/WORKSPACE \
-		${_MY_LOCALREPO}/protoc_bin_freebsd/WORKSPACE \
-		${_MY_LOCALREPO}/pyqt5/WORKSPACE \
-		${_MY_LOCALREPO}/rust_output/WORKSPACE
-	# Copy the bazel rules for NodeJS and esbuild to the custom local repository
+		${_MY_LOCALREPO}/protoc_bin_freebsd/WORKSPACE
+	# Copy the bazel rules for NodeJS to the custom local repository
 	# as they need some patching
-	@${CP} -r ${WRKSRC_esbuildtc} ${_MY_LOCALREPO}/esbuild_toolchain
 	@${CP} -r ${WRKSRC_bzlrnodejs} ${_MY_LOCALREPO}/rules_nodejs
 	# Link the remaining bazel rules into the custom local repository as
 	# they don't need to be patched
-.for _dir in bzlskylib bzlrcc bzlrjava bzlrpip bzlrproto bzlrpython bzlrrust bzlrsass ftlextra ftlrslib
+.for _dir in bzlskylib bzlrcc bzlrjava bzlrproto bzlrpython bzlrrust bzlrsass
 	@${RLN} ${WRKSRC_${_dir}} ${_MY_LOCALREPO}/${_dir:S/bzlr/rules_/}
 .endfor
+	# Prepare the Go environment for esbuild
+	@${MKDIR} ${WRKSRC_esbuild}/vendor/golang.org/x
+	@${RLN} ${WRKSRC_golang_sys} ${WRKSRC_esbuild}/vendor/golang.org/x/sys
 	# Copy custom BUILD.bazel files to the local repositories
 	@${CP} ${FILESDIR}/bazel/BUILD.bazel-local_esbuild \
 		${_MY_LOCALREPO}/local_esbuild/BUILD.bazel
@@ -473,22 +500,16 @@ post-extract:
 		${_MY_LOCALREPO}/local_node/BUILD.bazel
 	@${CP} ${FILESDIR}/bazel/BUILD.bazel-protoc_bin_freebsd \
 		${_MY_LOCALREPO}/protoc_bin_freebsd/BUILD.bazel
-	@${CP} ${FILESDIR}/bazel/BUILD.bazel-pyqt5 \
-		${_MY_LOCALREPO}/pyqt5/BUILD.bazel
 	@${CP} ${FILESDIR}/bazel/BUILD.bazel-rust_output-librsbridge \
 		${_MY_LOCALREPO}/rust_output/librsbridge/BUILD.bazel
 	@${CP} ${FILESDIR}/bazel/BUILD.bazel-rust_output-strings_json \
 		${_MY_LOCALREPO}/rust_output/strings_json/BUILD.bazel
-	@${CP} ${FILESDIR}/bazel/BUILD.bazel-i18n ${WRKSRC_ftlrslib}/BUILD.bazel
-	@${CP} ${FILESDIR}/bazel/BUILD.bazel-i18n ${WRKSRC_ftlextra}/BUILD.bazel
 	# Move some files out of the way as they will be replaced by custom copies.
 	@${MV} ${WRKSRC}/repos.bzl ${WRKSRC}/repos.bzl.dist
-	@${MV} ${WRKSRC}/pip/pyqt5/defs.bzl ${WRKSRC}/pip/pyqt5/defs.bzl.dist
 	@${MV} ${WRKSRC}/pylib/rsbridge/BUILD.bazel ${WRKSRC}/pylib/rsbridge/BUILD.bazel.dist
 	@${MV} ${WRKSRC}/rslib/i18n/BUILD.bazel ${WRKSRC}/rslib/i18n/BUILD.bazel.dist
 	# Copy the replacement files
 	@${CP} ${FILESDIR}/bazel/repos.bzl ${WRKSRC}/
-	@${CP} ${FILESDIR}/bazel/pyqt5.bzl ${WRKSRC}/pip/pyqt5/defs.bzl
 	@${CP} ${FILESDIR}/bazel/BUILD.bazel-pylib-rsbridge \
 		${WRKSRC}/pylib/rsbridge/BUILD.bazel
 	@${CP} ${FILESDIR}/bazel/BUILD.bazel-rslib-i18n \
@@ -500,19 +521,19 @@ post-patch:
 	@${REINPLACE_CMD} -e 's|\@PREFIX\@|${PREFIX}|' \
 		${WRKSRC}/qt/tools/runanki.system.in
 	@${REINPLACE_CMD} -e 's|%%_MY_BUILDHASH%%|${_MY_BUILDHASH}|' \
-		${WRKSRC}/scripts/status.sh
+		${WRKSRC}/tools/status.sh
 	@${REINPLACE_CMD} -e 's|%%_MY_LOCALREPO%%|${_MY_LOCALREPO}|g' \
-		${WRKSRC}/repos.bzl ${WRKSRC}/proto/protobuf.bzl \
-		${_MY_LOCALREPO}/esbuild_toolchain/esbuild_repo.bzl
+		${WRKSRC}/proto/protobuf.bzl \
+		${WRKSRC}/repos.bzl \
+		${_MY_LOCALREPO}/rules_nodejs/toolchains/esbuild/esbuild_repositories.bzl
 	@${REINPLACE_CMD} -e 's|%%_MY_YARNCACHE%%|${_MY_YARNCACHE}|' \
 		${_MY_LOCALREPO}/rules_nodejs/internal/npm_install/npm_install.bzl
 
 pre-configure:
 	# Link the binaries of Node, Protobuf and Yarn into the local bazel
 	# repositories to provide them during build.
-	${LN} -s ${LOCALBASE}/bin/protoc-gen-mypy ${WRKSRC}/pylib/tools/protoc-gen-mypy
-	${LN} -s ${LOCALBASE}/bin/esbuild ${_MY_LOCALREPO}/local_esbuild/bin/esbuild
 	${LN} -s ${LOCALBASE}/bin/node ${_MY_LOCALREPO}/local_node/node/bin/node
+	${LN} -s ${LOCALBASE}/lib/node_modules ${_MY_LOCALREPO}/local_node/node/lib/node_modules
 	${LN} -s ${LOCALBASE}/bin/yarn.js ${_MY_LOCALREPO}/local_node/yarn/bin/yarn.js
 	${LN} -s ${LOCALBASE}/bin/protoc ${_MY_LOCALREPO}/protoc_bin_freebsd/bin/protoc
 
@@ -526,6 +547,20 @@ pre-configure:
 #    `-> produces ${_MY_LOCALREPO}/rust_output/librsbridge/librsbridge.so
 # 3. The remaining components (Python, Qt5 and JS) are built by bazel
 pre-build:
+	${ECHO_MSG} "===> Building vendored esbuild binary with Go"
+	(cd ${WRKSRC_esbuild} ; \
+	for t in ${GO_TARGET}; do \
+		out=$$(${BASENAME} $$(${ECHO_CMD} $${t} | \
+			${SED} -Ee 's/^[^:]*:([^:]+).*$$/\1/' -e 's/^\.$$/esbuild/')); \
+		pkg=$$(${ECHO_CMD} $${t} | \
+			${SED} -Ee 's/^([^:]*).*$$/\1/' -e 's/^esbuild$$/./'); \
+		${ECHO_MSG} "===>  Building $${out} from $${pkg}"; \
+		${SETENV} ${MAKE_ENV} ${GO_ENV} GOPROXY=off ${GO_CMD} build ${GO_BUILDFLAGS} \
+			-o ${GO_WRKDIR_BIN}/$${out} \
+			$${pkg}; \
+	done)
+	${CP} ${GO_WRKDIR_BIN}/esbuild ${_MY_LOCALREPO}/local_esbuild/bin/
+	${ECHO_MSG} "===> Building library with Rust"
 	# Generate buildinfo.txt which is used via BUILDINFO in ${CARGO_ENV} during
 	# compilation.
 	${ECHO_CMD} -e "STABLE_VERSION ${DISTVERSION}\nSTABLE_BUILDHASH ${_MY_BUILDHASH}" >> ${_MY_LOCALREPO}/rust_output/buildinfo.txt
@@ -543,15 +578,22 @@ do-build:
 	# via "tsc".
 	cd ${WRKSRC} && \
 		bazel --output_user_root="${WRKDIR}/.bazel" build \
+			--action_env=npm_config_cache="${_MY_NPMCACHE}" \
+			--action_env=npm_config_offline="true" \
+			--action_env=PYO3_PYTHON="${PYTHON_CMD}" \
 			--action_env=PYTHON_SITE_PACKAGES="${PYTHON_SITELIBDIR}" \
 			--action_env=PYTHON_SYS_EXECUTABLE="${PYTHON_CMD}" \
+			--color=no \
 			--compilation_mode opt \
-			--jobs 1 \
+			--config opt \
+			--jobs=1 \
 			--subcommands \
-		dist
+	                --show_progress_rate_limit=-1 \
+			wheels
 
 post-build:
-	${TAR} -xf `${FIND} ${WRKDIR}/.bazel -name "dist.tar"` -C ${WRKSRC}
+	${MKDIR} ${WRKSRC}/bazel-dist
+	${TAR} -xf `${FIND} ${WRKDIR}/.bazel -name "wheels.tar"` -C ${WRKSRC}/bazel-dist
 	cd ${WRKSRC}/bazel-dist && \
 		${UNZIP_NATIVE_CMD} anki-${DISTVERSION}-*.whl && \
 		${UNZIP_NATIVE_CMD} aqt-${DISTVERSION}-*.whl
@@ -570,7 +612,7 @@ do-install:
 	cd ${WRKSRC}/bazel-dist/ \
 		&& ${COPYTREE_SHARE} anki ${STAGEDIR}${DATADIR} "! -name .gitignore" \
 		&& ${COPYTREE_SHARE} aqt ${STAGEDIR}${DATADIR} "! -name .gitignore"
-	cd ${WRKSRC}/qt/linux \
+	cd ${WRKSRC}/qt/bundle/lin \
 		&& ${INSTALL_DATA} anki.xpm anki.png ${STAGEDIR}${PREFIX}/share/pixmaps \
 		&& ${INSTALL_DATA} anki.desktop ${STAGEDIR}${PREFIX}/share/applications \
 		&& ${INSTALL_MAN} anki.1 ${STAGEDIR}${MANPREFIX}/man/man1
@@ -578,9 +620,19 @@ do-install:
 		&& ${INSTALL_SCRIPT} runanki.system.in ${STAGEDIR}${PREFIX}/bin/anki
 	${STRIP_CMD} ${STAGEDIR}${DATADIR}/anki/_backend/rsbridge.so
 
+# Helper target to make the generation of the npm cache easier (only required for esbuild-npm)
+make-npm-cache: patch
+	@cd ${WRKDIR} && ${RM} -r ${_MY_NPMCACHE}
+	@cd ${WRKSRC_bzlrnodejs}/toolchains/esbuild/ \
+		&& ${SETENV} HOME=${WRKDIR} ${LOCALBASE}/bin/npm install --no-optional --ignore-scripts
+	@cd ${_MY_NPMCACHE} \
+		&& ${RM} -r _locks anonymous-cli-metrics.json
+	@cd ${WRKDIR} \
+		&& ${TAR} -czf ${PORTNAME}-npm-cache-${DISTVERSION}${EXTRACT_SUFX} .npm \
+		&& ${ECHO_CMD} "Please upload the file ${WRKDIR}/${PORTNAME}-npm-cache-${DISTVERSION}${EXTRACT_SUFX}"
+
 # Helper target to make the generation of the yarn cache easier
-make-yarn-cache:
-	# Run "make extract" before executing this target
+make-yarn-cache: patch
 	@${RM} -r ${_MY_YARNCACHE}
 	@cd ${WRKSRC}/ts \
 		&& ${LOCALBASE}/bin/yarn --cache-folder ${_MY_YARNCACHE} install
diff --git a/games/anki/distinfo b/games/anki/distinfo
index 1578f24a7672..ca7baf22ee3c 100644
--- a/games/anki/distinfo
+++ b/games/anki/distinfo
@@ -1,64 +1,60 @@
-TIMESTAMP = 1648230415
-SHA256 (anki-yarn-cache-2.1.49.tar.gz) = 74a36b10b9d0bd9cbef8592acfe19b778eb2d1e4661d4c8f37fcef8e302b08fb
-SIZE (anki-yarn-cache-2.1.49.tar.gz) = 104554659
-SHA256 (rust/crates/Inflector-0.11.4.crate) = fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3
-SIZE (rust/crates/Inflector-0.11.4.crate) = 17438
+TIMESTAMP = 1662406747
+SHA256 (anki-yarn-cache-2.1.54.tar.gz) = cc2a8185de1ec617a1d90c8108f0bf00fc28f7aa307e79c4e72040602d8f502d
+SIZE (anki-yarn-cache-2.1.54.tar.gz) = 141134171
+SHA256 (anki-npm-cache-2.1.54.tar.gz) = f137df731bdffd4d62c2d46d35913714180a4c2c52e8079376653d870631ab0d
+SIZE (anki-npm-cache-2.1.54.tar.gz) = 3261225
 SHA256 (rust/crates/adler-1.0.2.crate) = f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe
 SIZE (rust/crates/adler-1.0.2.crate) = 12778
-SHA256 (rust/crates/ahash-0.7.4.crate) = 43bb833f0bf979d8475d38fbf09ed3b8a55e1885fe93ad3f93239fc6a4f17b98
-SIZE (rust/crates/ahash-0.7.4.crate) = 37072
+SHA256 (rust/crates/ahash-0.7.6.crate) = fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47
+SIZE (rust/crates/ahash-0.7.6.crate) = 38030
 SHA256 (rust/crates/aho-corasick-0.7.18.crate) = 1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f
 SIZE (rust/crates/aho-corasick-0.7.18.crate) = 112923
-SHA256 (rust/crates/ammonia-3.1.2.crate) = 2e445c26125ff80316eaea16e812d717b147b82a68682bd4730f74d4845c8b35
-SIZE (rust/crates/ammonia-3.1.2.crate) = 39704
-SHA256 (rust/crates/anyhow-1.0.42.crate) = 595d3cfa7a60d4555cb5067b99f07142a08ea778de5cf993f7b75c7d8fabc486
-SIZE (rust/crates/anyhow-1.0.42.crate) = 34827
-SHA256 (rust/crates/arc-swap-1.3.0.crate) = e906254e445520903e7fc9da4f709886c84ae4bc4ddaf0e093188d66df4dc820
-SIZE (rust/crates/arc-swap-1.3.0.crate) = 63680
+SHA256 (rust/crates/ammonia-3.1.4.crate) = ea9f21d23d82bae9d33c21080572af1fa749788e68234b5d8fa5e39d3e0783ed
+SIZE (rust/crates/ammonia-3.1.4.crate) = 39875
+SHA256 (rust/crates/anyhow-1.0.56.crate) = 4361135be9122e0870de935d7c439aef945b9f9ddd4199a553b5270b49c82a27
+SIZE (rust/crates/anyhow-1.0.56.crate) = 44780
+SHA256 (rust/crates/arc-swap-1.5.0.crate) = c5d78ce20460b82d3fa150275ed9d55e21064fc7951177baacf86a145c4a4b1f
+SIZE (rust/crates/arc-swap-1.5.0.crate) = 65351
 SHA256 (rust/crates/arrayref-0.3.6.crate) = a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544
 SIZE (rust/crates/arrayref-0.3.6.crate) = 10035
 SHA256 (rust/crates/arrayvec-0.4.12.crate) = cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9
 SIZE (rust/crates/arrayvec-0.4.12.crate) = 26551
-SHA256 (rust/crates/arrayvec-0.5.2.crate) = 23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b
-SIZE (rust/crates/arrayvec-0.5.2.crate) = 27838
-SHA256 (rust/crates/askama-0.10.5.crate) = d298738b6e47e1034e560e5afe63aa488fea34e25ec11b855a76f0d7b8e73134
-SIZE (rust/crates/askama-0.10.5.crate) = 7994
-SHA256 (rust/crates/askama_derive-0.10.5.crate) = ca2925c4c290382f9d2fa3d1c1b6a63fa1427099721ecca4749b154cc9c25522
-SIZE (rust/crates/askama_derive-0.10.5.crate) = 6927
-SHA256 (rust/crates/askama_escape-0.10.1.crate) = 90c108c1a94380c89d2215d0ac54ce09796823cca0fd91b299cfff3b33e346fb
-SIZE (rust/crates/askama_escape-0.10.1.crate) = 8535
-SHA256 (rust/crates/askama_shared-0.11.1.crate) = 2582b77e0f3c506ec4838a25fa8a5f97b9bed72bb6d3d272ea1c031d8bd373bc
-SIZE (rust/crates/askama_shared-0.11.1.crate) = 30554
-SHA256 (rust/crates/async-trait-0.1.51.crate) = 44318e776df68115a881de9a8fd1b9e53368d7a4a5ce4cc48517da3393233a5e
-SIZE (rust/crates/async-trait-0.1.51.crate) = 25531
+SHA256 (rust/crates/arrayvec-0.7.2.crate) = 8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6
+SIZE (rust/crates/arrayvec-0.7.2.crate) = 29341
+SHA256 (rust/crates/async-trait-0.1.52.crate) = 061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3
+SIZE (rust/crates/async-trait-0.1.52.crate) = 25913
 SHA256 (rust/crates/atty-0.2.14.crate) = d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8
 SIZE (rust/crates/atty-0.2.14.crate) = 5470
-SHA256 (rust/crates/autocfg-1.0.1.crate) = cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a
-SIZE (rust/crates/autocfg-1.0.1.crate) = 12908
+SHA256 (rust/crates/autocfg-1.1.0.crate) = d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa
+SIZE (rust/crates/autocfg-1.1.0.crate) = 13272
 SHA256 (rust/crates/base64-0.13.0.crate) = 904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd
 SIZE (rust/crates/base64-0.13.0.crate) = 62070
-SHA256 (rust/crates/bitflags-1.2.1.crate) = cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693
-SIZE (rust/crates/bitflags-1.2.1.crate) = 16745
-SHA256 (rust/crates/bitvec-0.19.5.crate) = 8942c8d352ae1838c9dda0b0ca2ab657696ef2232a20147cf1b30ae1a9cb4321
-SIZE (rust/crates/bitvec-0.19.5.crate) = 148200
-SHA256 (rust/crates/blake3-0.3.8.crate) = b64485778c4f16a6a5a9d335e80d449ac6c70cdd6a06d2af18a6f6f775a125b3
-SIZE (rust/crates/blake3-0.3.8.crate) = 154058
-SHA256 (rust/crates/bumpalo-3.7.0.crate) = 9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631
-SIZE (rust/crates/bumpalo-3.7.0.crate) = 134261
+SHA256 (rust/crates/bitflags-1.3.2.crate) = bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a
+SIZE (rust/crates/bitflags-1.3.2.crate) = 23021
+SHA256 (rust/crates/blake3-1.3.1.crate) = a08e53fc5a564bb15bfe6fae56bd71522205f1f91893f9c0116edad6496c183f
+SIZE (rust/crates/blake3-1.3.1.crate) = 157714
+SHA256 (rust/crates/block-buffer-0.10.2.crate) = 0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324
+SIZE (rust/crates/block-buffer-0.10.2.crate) = 10258
+SHA256 (rust/crates/bstr-0.2.17.crate) = ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223
+SIZE (rust/crates/bstr-0.2.17.crate) = 330350
+SHA256 (rust/crates/bumpalo-3.9.1.crate) = a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899
+SIZE (rust/crates/bumpalo-3.9.1.crate) = 77507
 SHA256 (rust/crates/byteorder-1.4.3.crate) = 14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610
 SIZE (rust/crates/byteorder-1.4.3.crate) = 22512
-SHA256 (rust/crates/bytes-1.0.1.crate) = b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040
-SIZE (rust/crates/bytes-1.0.1.crate) = 48142
-SHA256 (rust/crates/cc-1.0.69.crate) = e70cc2f62c6ce1868963827bd677764c62d07c3d9a3e1fb1177ee1a9ab199eb2
-SIZE (rust/crates/cc-1.0.69.crate) = 56044
-SHA256 (rust/crates/cfg-if-0.1.10.crate) = 4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822
-SIZE (rust/crates/cfg-if-0.1.10.crate) = 7933
+SHA256 (rust/crates/bytes-1.1.0.crate) = c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8
+SIZE (rust/crates/bytes-1.1.0.crate) = 49640
+SHA256 (rust/crates/cast-0.2.7.crate) = 4c24dab4283a142afa2fdca129b80ad2c6284e073930f964c3a1293c225ee39a
+SIZE (rust/crates/cast-0.2.7.crate) = 11222
+SHA256 (rust/crates/cc-1.0.73.crate) = 2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11
+SIZE (rust/crates/cc-1.0.73.crate) = 57880
 SHA256 (rust/crates/cfg-if-1.0.0.crate) = baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd
 SIZE (rust/crates/cfg-if-1.0.0.crate) = 7934
 SHA256 (rust/crates/chrono-0.4.19.crate) = 670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73
 SIZE (rust/crates/chrono-0.4.19.crate) = 155663
-SHA256 (rust/crates/coarsetime-0.1.19.crate) = 2918e2ffa91a49dabbba4965fe38a37a1ba0b6953a29e32cc250a8d59cd42232
-SIZE (rust/crates/coarsetime-0.1.19.crate) = 7927
+SHA256 (rust/crates/clap-2.34.0.crate) = a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c
+SIZE (rust/crates/clap-2.34.0.crate) = 202210
+SHA256 (rust/crates/coarsetime-0.1.21.crate) = 441947d9f3582f20b35fdd2bc5ada3a8c74c9ea380d66268607cb399b510ee08
+SIZE (rust/crates/coarsetime-0.1.21.crate) = 8167
 SHA256 (rust/crates/codespan-0.11.1.crate) = 3362992a0d9f1dd7c3d0e89e0ab2bb540b7a95fea8cd798090e758fda2899b5e
 SIZE (rust/crates/codespan-0.11.1.crate) = 8895
 SHA256 (rust/crates/codespan-reporting-0.11.1.crate) = 3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e
@@ -67,34 +63,42 @@ SHA256 (rust/crates/constant_time_eq-0.1.5.crate) = 245097e9a4535ee1e3e3931fcfcd
 SIZE (rust/crates/constant_time_eq-0.1.5.crate) = 4936
 SHA256 (rust/crates/convert_case-0.4.0.crate) = 6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e
*** 2722 LINES SKIPPED ***